注意在每次调试之前需要删除MySQL中的user数据表,否则模型修改不生效
flask主代码
| from flask import Flask, request, redirect, url_for, render_template |
| from flask_sqlalchemy import SQLAlchemy |
| from werkzeug.security import generate_password_hash, check_password_hash |
| |
| app = Flask(__name__) |
| app.template_folder = 'templates' |
| app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1211lmx@localhost:3307/db001' |
| 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(20), unique=True, nullable=False) |
| password_hash = db.Column(db.String(256), nullable=False) |
| |
| def set_password(self, password): |
| self.password_hash = generate_password_hash(password) |
| |
| def check_password(self, password): |
| return check_password_hash(self.password_hash, password) |
| |
| @app.route('/') |
| def index(): |
| return 'Hello World!' |
| |
| @app.route('/register', methods=['GET', 'POST']) |
| def register(): |
| if request.method == 'POST': |
| username = request.form['username'] |
| password = request.form['password'] |
| new_user = User(username=username) |
| new_user.set_password(password) |
| db.session.add(new_user) |
| db.session.commit() |
| return redirect(url_for('login')) |
| return render_template('register.html') |
| |
| @app.route('/login', methods=['GET', 'POST']) |
| def login(): |
| if request.method == 'POST': |
| username = request.form['username'] |
| password = request.form['password'] |
| user = User.query.filter_by(username=username).first() |
| if not user or not user.check_password(password): |
| return "Invalid username or password." |
| return "Login successful." |
| return render_template('login.html') |
| |
| if __name__ == '__main__': |
| with app.app_context(): |
| db.create_all() |
| app.run(debug=True) |
注册页面html模板
| <!DOCTYPE html> |
| <html lang="zh-cn"> |
| <head> |
| <title>Register</title> |
| </head> |
| <body> |
| <h1>Register</h1> |
| <form method="post"> |
| <label for="username">Username:</label> |
| <input type="text" id="username" name="username"><br> |
| <label for="password">Password:</label> |
| <input type="password" id="password" name="password"><br> |
| <input type="submit" value="Register"> |
| </form> |
| </body> |
| </html> |
登录页面html模板
| <!DOCTYPE html> |
| <html lang="zh-cn"> |
| <head> |
| <title>Login</title> |
| </head> |
| <body> |
| <h1>Login</h1> |
| <form method="post"> |
| <label for="username">Username:</label> |
| <input type="text" id="username" name="username"><br> |
| <label for="password">Password:</label> |
| <input type="password" id="password" name="password"><br> |
| <input type="submit" value="Login"> |
| </form> |
| </body> |
| </html> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了