
Flask
账户注册
综合使用所学习过的知识,搭建登录页面
代码示例:
https://github.com/ningwenyan/demo_code/tree/master/flask_demo_code/T26
总览
❯ tree
.
├── app.py
├── auth
│ ├── auth_form.py
│ ├── __init__.py
│ └── views.py
├── common
│ ├── errors.py
│ ├── exts.py
│ ├── __init__.py
│ ├── mailModel.py
│ └── sqlModel.py
├── config.py
├── manager.py
├── migrations
│ ├── alembic.ini
│ ├── env.py
│ ├── README
│ ├── script.py.mako
│ └── versions
│ ├── 44bc21866b0d_.py
│ └── __pycache__
│ └── 44bc21866b0d_.cpython-37.pyc
├── static
└── templates
├── 401.html
├── 403.html
├── 404.html
├── 500.html
└── auth
├── change_email.html
├── change_password.html
├── index.html
├── login.html
│ ├── change_email.html
│ ├── change_email.txt
│ ├── confirm.html
│ ├── confirm.txt
│ ├── password_reset.html
│ └── password_reset.txt
├── main
│ └── reset_password.html
├── personal.html
├── register.html
└── reset_password.html
搭建可供访问的基本界面
使用
Flask Blueprint
搭建基本可供注册登录的页面.❯ tree
.
├── app.py
├── auth # 蓝图,账户登录页面
│ ├── __init__.py
│ └── views.py # 视图
├── common # 蓝图,403,404,500错误页面处理
│ ├── errors.py # 错误处理逻辑
│ └── __init__.py
├── config.py
├── static
└── templates
├── 403.html
├── 404.html
├── 500.html
└── auth
├── index.html
├── login.html
└── register.html# config.py
DEBUG = True
TEMPLATES_AUTO_RELOAD = True# auth/__init__.py
from flask import Blueprint
auth_bp = Blueprint('auth', __name__, url_prefix='/auth')
from . import views# auth/views.py
from . import auth_bp
from flask import render_template, redirect, url_for
@auth_bp.route('/')
def index():
return render_template('auth/index.html')
# 设计注册,登录页面
@auth_bp.route('/register/', methods = ['GET', 'POST'])
def register():
return render_template('auth/register.html')
@auth_bp.route('/login/', methods = ['GET', 'POST'])
def login():
return render_template('auth/login.html')
@auth_bp.route('/logout/')
def logout():
return redirect(url_for('auth.index'))# common/__init__.py
from flask import Blueprint
common_bp = Blueprint('common', __name__, url_prefix='/common')
from . import errorsfrom . import common_bp
from flask import render_template
# 设计403, 404, 500错误
@common_bp.app_errorhandler(403)
def forbidden(e):
return render_template('403.html'), 403
@common_bp.app_errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
@common_bp.app_errorhandler(500)
def internal_server_error(e):
return render_template('500.html'), 500
"""
设计在蓝图中的 app_errorhandler 可以接受所有的错误
"""# app.py
from flask import Flask
import config
from auth import auth_bp
from common import common_bp
app = Flask(__name__)
app.config.from_object(config)
@app.route('/')
def hello_world():
return 'Hello World!'
# 注册蓝图
app.register_blueprint(auth_bp)
app.register_blueprint(common_bp)
if __name__ == '__main__':
app.run()模板信息
<!----login --->
<h3>Login</h3>
<form action="" method="post">
<div>
<label for="">Email:</label>
<input type="text" placeholder="Email" name="email">
</div>
<div>
<label for="">Password:</label>
<input type="password" placeholder="Password" name="password">
</div>
<div>
<label for="">Remember me:</label>
<input type="checkbox" name="confirmed">
</div>
<div>
<input type="submit" name="submit" value="Login">
</div>
</form><!----register--->
<h3>Register</h3>
<form action="" method="post">
<div>
<label for="">Email:</label>
<input type="text" placeholder="Email" name="email">
</div>
<div>
<label for="">Username:</label>
<input type="text" placeholder="Username" name="username">
</div>
<div>
<label for="">Password:</label>
<input type="password" placeholder="Password" name="password">
</div>
<div>
<label for="">Confirm password:</label>
<input type="password" placeholder="Confirm password" name="con_password">
</div>
<div>
<input type="submit" name="submit" value="Register">
</div>
</form>
使用Flask-Login
设计登录
设计表单验证
设计注册页面和登录页面的表单验证
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField
from wtforms.validators import Length, EqualTo, Regexp, Required, DataRequired, Email
class LoginForm(FlaskForm):
email = StringField(validators=[Email(), DataRequired(), Length(1, 64)])
password = PasswordField(validators=[Length(1, 24)])
confirmed = BooleanField()
class RegisterForm(FlaskForm):
email = StringField('Email', validators=[Email(), Length(1, 64), DataRequired()])
username = StringField('Username', validators=[
DataRequired(), Length(1, 64),
Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0,
'Username must have only letters, numbers, dots or '
'underscores')
])
password = PasswordField('Password', validators=[Length(1, 24), Required()])
con_password = PasswordField('Confirm Password', validators=[EqualTo('password')])
添加Flask-Login
支持
# common/exts.py
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
db = SQLAlchemy()
login_manager = LoginManager()# app.py
from common.exts import db, login_manager
login_manager.init_app(app)
加载密码加密模块(Flask_Bcrypt
)
# common/exts.py
from flask_bcrypt import Bcrypt
flask_bcrypt = Bcrypt()# app.py
from common.exts import db, login_manager, flask_bcrypt
flask_bcrypt.init_app(app)
– END –
原文始发于微信公众号(Flask学习笔记):Flask账户注册(1)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/36412.html