Created
January 22, 2022 10:35
-
-
Save nezuppo/6c0d34d9f7f9efbe74644b4b9ed26d19 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
''' | |
参考: https://qiita.com/sky_jokerxx/items/b170a670c0d50c05d52d | |
''' | |
from flask import ( | |
Flask, | |
request, | |
Response, | |
abort, | |
) | |
from flask_login import ( | |
LoginManager, | |
login_user, | |
logout_user, | |
login_required, | |
UserMixin, | |
) | |
app = Flask(__name__) | |
#app = Flask(__name__, template_folder='./') | |
login_manager = LoginManager() | |
login_manager.init_app(app) | |
app.config['SECRET_KEY'] = 'secret' | |
class User(UserMixin): | |
def __init__(self, id, name, password): | |
self.id = id | |
self.name = name | |
self.password = password | |
class Users: | |
users = [ | |
User(1, 'user01', 'password'), | |
User(2, 'user02', 'password'), | |
] | |
names = dict([(user.name, user) for user in users]) | |
ids = dict([(user.id, user) for user in users]) | |
@login_manager.user_loader | |
def load_user(user_id): | |
return Users.ids.get(int(user_id)) | |
@app.route('/') | |
def home(): | |
return Response(''' | |
home: | |
<a href='/login/'>login</a> | |
<a href='/protected/'>protected</a> | |
<a href='/logout/'>logout</a> | |
''') | |
@app.route('/protected/') | |
@login_required | |
def protected(): | |
return Response(''' | |
protected<br /> | |
<a href="/logout/">logout</a> | |
''') | |
@app.route('/login/', methods=['GET', 'POST']) | |
def login(): | |
if(request.method == 'POST'): | |
username = request.form['username'] | |
password = request.form['password'] | |
if(username in Users.names and password == Users.names[username].password): | |
login_user(Users.names[username]) | |
return Response(''' | |
have logined<br /> | |
<a href="/protected/">protected</a><br /> | |
<a href="/logout/">logout</a> | |
''') | |
else: | |
return abort(401) | |
else: | |
return Response(''' | |
<form method="POST"> | |
<div>user: <input type="text" name="username"></div> | |
<div>password: <input type="password" name="password"></div> | |
<div><button type="submit">login</button></div> | |
</form> | |
''') | |
@app.route('/logout/') | |
@login_required | |
def logout(): | |
logout_user() | |
return Response(''' | |
have logouted<br /> | |
<a href="/login/">login</a> | |
''') | |
if __name__ == '__main__': | |
app.run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment