Flask Web开发-用户认证部分代码分析(一)

本文介绍了Flask Web框架中的蓝本概念及其在认证模块的应用。通过创建认证蓝本,可以更好地组织代码并提高测试效率。文章详细展示了如何设置蓝本、定义路由和视图,以及如何使用工厂函数进行配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在正文之前先写一下flask程序的基本结构,这个对之后代码的理解很有意义.

|-flasky 
|-app/    #大部分程序都放在这里
  |-templates/   #模块
  |-static/
  |-main/
   |-__init__.py  #初始化程序
   |-errors.py  #错误处理程序
   |-forms.py
   |-views.py  #路由和视图程序
  |-__init__.py  #初始化程序,注册蓝本
  |-email.py
  |-models.py
|-migrations/  #数据库迁移脚本
|-tests/ #单元测试
  |-__init__.py
  |-test*.py
|-venv/ #虚拟环境
|-requirements.txt  #所有的依赖包文件
|-config.py  #配置文件
|-manage.py  #启动程序

1.在app中创建认证蓝本app/auth/_init__.py,创建蓝本的好处就是更好的使用工厂函数,方便测试,环境配置,能创建多个实例,多个模块,运行大型程序时易管理代码.下面的代码中”.”在这里是省略了上层蓝本文件夹auth,创建的蓝本最后添加了视图程序views.py.

from flask import Blueprint
auth = Blueprint('auth', __name__)
from . import views

2.蓝本中的路由和视图程序 app/auth/views.py
render_template() 函数会首先搜索程序配置的模板文件夹,然后再搜索蓝本配置的模板文件夹。这里定义了login()函数,返回值是login.html,即登陆界面用这个模板来渲染.

from flask import render_template
from . import auth

@auth.route('/login')
def login():
   return render_template('auth/login.html')

login.html

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block title %}Flasky - Login{% endblock %}

{% block page_content %}
<div class="page-header">
    <h1>Login</h1>
</div>
<div class="col-md-4">
    {{ wtf.quick_form(form) }}
</div>
{% endblock %}

这里解释一下 wtf.quick_form(form),这是用 bootstrap模块中wtf.quick_form宏函数来渲染login.html中的表单,就是登陆界面.
3.app/init.py 添加工厂函数create_app,可以实现多个实例的运行,也方便配置类的管理.

def create_app(config_name):
  # ...

  from .auth import auth as auth_blueprint
  app.register_blueprint(auth_blueprint, url_prefix='/auth')
  return app

app/_init__.py的全部程序

from flask import Flask
from flask_bootstrap import Bootstrap
from flask_mail import Mail
from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from config import config

bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()

login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.login_view = 'auth.login'


def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)
    login_manager.init_app(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth')

    return app

url_prefix表示访问报表时的URL中WEB服务器地址、端口及WEB应用名组成的一个串.使用了这个参数,注册后蓝本中定义的
所有路由都会加上指定的前缀,即这个例子中的 /auth。例如,/login 路由会注册成 /auth/login,在开发 Web 服务器中,完整的 URL 就变成了 http://localhost:5000/auth/login。就是说让访问地址后面加了以上信息,不单单是 http://localhost:5000/.通过以上程序,我们就可以用config中的配置以及app()来完成初始化了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值