Skip to content

Instantly share code, notes, and snippets.

@nezuppo
Created January 22, 2022 10:35
Show Gist options
  • Save nezuppo/6c0d34d9f7f9efbe74644b4b9ed26d19 to your computer and use it in GitHub Desktop.
Save nezuppo/6c0d34d9f7f9efbe74644b4b9ed26d19 to your computer and use it in GitHub Desktop.
#!/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