commit
725f1844cc
4 changed files with 156 additions and 0 deletions
@ -0,0 +1,66 @@ |
|||||
|
from flask import Flask, render_template, request, url_for, redirect |
||||
|
from flask_sqlalchemy import SQLAlchemy |
||||
|
from flask_login import LoginManager, UserMixin, login_user, logout_user |
||||
|
|
||||
|
app = Flask(__name__) |
||||
|
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///db.sqlite" |
||||
|
app.config["SECRET_KEY"] = "abc" |
||||
|
db = SQLAlchemy() |
||||
|
|
||||
|
login_manager = LoginManager() |
||||
|
login_manager.init_app(app) |
||||
|
|
||||
|
|
||||
|
class Users(UserMixin, db.Model): |
||||
|
id = db.Column(db.Integer, primary_key=True) |
||||
|
username = db.Column(db.String(250), unique=True, nullable=False) |
||||
|
password = db.Column(db.String(250), nullable=False) |
||||
|
|
||||
|
|
||||
|
db.init_app(app) |
||||
|
|
||||
|
|
||||
|
with app.app_context(): |
||||
|
db.create_all() |
||||
|
|
||||
|
|
||||
|
@login_manager.user_loader |
||||
|
def loader_user(user_id): |
||||
|
return Users.query.get(user_id) |
||||
|
|
||||
|
|
||||
|
@app.route('/register', methods=["GET", "POST"]) |
||||
|
def register(): |
||||
|
if request.method == "POST": |
||||
|
user = Users(username=request.form.get("username"), |
||||
|
password=request.form.get("password")) |
||||
|
db.session.add(user) |
||||
|
db.session.commit() |
||||
|
return redirect(url_for("login")) |
||||
|
return render_template("sign_up.html") |
||||
|
|
||||
|
|
||||
|
@app.route("/login", methods=["GET", "POST"]) |
||||
|
def login(): |
||||
|
if request.method == "POST": |
||||
|
user = Users.query.filter_by( |
||||
|
username=request.form.get("username")).first() |
||||
|
if user.password == request.form.get("password"): |
||||
|
login_user(user) |
||||
|
return redirect(url_for("home")) |
||||
|
return render_template("login.html") |
||||
|
|
||||
|
|
||||
|
@app.route("/logout") |
||||
|
def logout(): |
||||
|
logout_user() |
||||
|
return redirect(url_for("home")) |
||||
|
|
||||
|
|
||||
|
@app.route("/") |
||||
|
def home(): |
||||
|
return render_template("home.html") |
||||
|
|
||||
|
|
||||
|
if __name__ == "__main__": |
||||
|
app.run() |
||||
@ -0,0 +1,28 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
<head> |
||||
|
<meta charset="UTF-8" /> |
||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
|
<title>Home</title> |
||||
|
<style> |
||||
|
h1 { |
||||
|
color: green; |
||||
|
} |
||||
|
</style> |
||||
|
</head> |
||||
|
<body> |
||||
|
<nav> |
||||
|
<ul> |
||||
|
<li><a href="/login">Login</a></li> |
||||
|
<li><a href="/register">Create account</a></li> |
||||
|
</ul> |
||||
|
</nav> |
||||
|
{% if current_user.is_authenticated %} |
||||
|
<h1>You are logged in</h1> |
||||
|
<a href="/logout">Logout</a> |
||||
|
{% else %} |
||||
|
<h1>You are not logged in</h1> |
||||
|
{% endif %} |
||||
|
</body> |
||||
|
</html> |
||||
@ -0,0 +1,30 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
<head> |
||||
|
<meta charset="UTF-8" /> |
||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
|
<title>Login</title> |
||||
|
<style> |
||||
|
h1{ |
||||
|
color: green; |
||||
|
} |
||||
|
</style> |
||||
|
</head> |
||||
|
<body> |
||||
|
<nav> |
||||
|
<ul> |
||||
|
<li><a href="/login">Login</a></li> |
||||
|
<li><a href="/register">Create account</a></li> |
||||
|
</ul> |
||||
|
</nav> |
||||
|
<h1>Login to your account</h1> |
||||
|
<form action="#" method="post"> |
||||
|
<label for="username">Username:</label> |
||||
|
<input type="text" name="username" /> |
||||
|
<label for="password">Password:</label> |
||||
|
<input type="password" name="password" /> |
||||
|
<button type="submit">Submit</button> |
||||
|
</form> |
||||
|
</body> |
||||
|
</html> |
||||
@ -0,0 +1,32 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
<head> |
||||
|
<meta charset="UTF-8" /> |
||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
|
<title>Sign Up</title> |
||||
|
<style> |
||||
|
h1 { |
||||
|
color: green; |
||||
|
} |
||||
|
</style> |
||||
|
</head> |
||||
|
<body> |
||||
|
<nav> |
||||
|
<ul> |
||||
|
<li><a href="/login">Login</a></li> |
||||
|
<li><a href="/register">Create account</a></li> |
||||
|
</ul> |
||||
|
</nav> |
||||
|
<h1>Create an account</h1> |
||||
|
<form action="#" method="post"> |
||||
|
<label for="username">Username:</label> |
||||
|
<input type="text" name="username" /> |
||||
|
<label for="password">Password:</label> |
||||
|
<input type="password" name="password" /> |
||||
|
<label for="name">name:</label> |
||||
|
<input type="text" name="name" /> |
||||
|
<button type="submit">Submit</button> |
||||
|
</form> |
||||
|
</body> |
||||
|
</html> |
||||
Reference in new issue