FLASKの環境で、データベースにユーザー登録するプログラムです。
前回はパスワードの登録が無かったので今回はパスワードを登録し、またログイン画面も加えます。
メインファイル
main.pyとして保存します。
from flask import Flask, render_template, request, redirect, url_for
from werkzeug.security import check_password_hash, generate_password_hash
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), nullable=False)
email = db.Column(db.String(120), nullable=False)
password = db.Column(db.String(256), nullable=False)
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
username = request.form['username']
email = request.form['email']
password = request.form['password']
hashed_password = generate_password_hash(password, method='sha256')
user = User.query.filter_by(username=username).first()
if user:
return 'ユーザーが存在しています'
new_user = User(username=username, email=email,
password=hashed_password)
db.session.add(new_user)
db.session.commit()
return redirect(url_for('user_login'))
return render_template('register.html')
@app.route('/login', methods=['GET', 'POST'])
def user_login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = User.query.filter_by(username=username).first()
if not user:
return 'ユーザーが見つかりません'
if not check_password_hash(user.password, password):
return '無効なパスワード'
return redirect(url_for('home'))
return render_template('login.html')
@app.route('/')
def home():
return 'ホームページ画面'
if __name__ == '__main__':
app.run(debug=True)
データベースが存在していなければ、作成しています。
登録画面 register.html
ユーザー登録する画面になります。templatesのフォルダに保存します。
<!DOCTYPE html>
<html>
<head>
<title>ユーザー登録</title>
</head>
<body>
<h1>ユーザー登録</h1>
<form method="POST" action="{{ url_for('register') }}">
<label for="username">ユーザー名:</label>
<input type="text" name="username" id="username" /><br /><br />
<label for="email">Email:</label>
<input type="email" name="email" id="email" /><br /><br />
<label for="password">パスワード:</label>
<input type="password" name="password" id="password" /><br /><br />
<input type="submit" value="Register" />
</form>
</body>
</html>
ログイン画面 login.html
ログイン画面になります。templatesのフォルダに保存します。
<!DOCTYPE html>
<html>
<head>
<title>ログイン画面</title>
</head>
<body>
<h1>ログイン画面</h1>
<form method="POST" action="{{ url_for('user_login') }}">
<label for="username">ユーザー名:</label>
<input type="text" name="username" id="username" /><br /><br />
<label for="password">パスワード:</label>
<input type="password" name="password" id="password" /><br /><br />
<input type="submit" value="Login" />
</form>
</body>
</html>