第六课 Flask用户注册数据加密手机邮箱激活和内置对象
tags:
- Flask
- 2019千锋教育
categories:
- flask
- 钩子函数
- 内置对象q和Config
- 用户注册数据加密
- 邮箱发送
- 手机激活
文章目录
第一节 钩子函数
1.1 钩子函数介绍
- 钩子函数面向切面编程,动态介入请求流程。
- 请求钩子(相当于中间件)
- before first request
- before request
- after reguest
- teardown request 请求关闭
- 可以使用蓝图的,也可以直接使用app的。
# views.py
# 统计、做反扒、优先级、频率反扒、用户登录的判断
from flask import request
@blue.before_request
def before():
print(request.url)
# 界面统一的动态加载、DebugToBar
@blue.after_request
def after(res):
print("after", res)
print(type(res))
return res
1.2 Django面试题:# Djangs请求流程
- 普通回答(连60都不能给你呀兄弟)
- urls -> views
- views -> models
- models -> views
- views -> response
- 添加中间件回答
- client -> process_ request [ ] (逐一得进行便利process_ request)
- 逐一进行process_ request
- process_request -> urls
- urls -> process view
- 逐一进行pprocess view
- process view -> views
- views -> models
- models -> views
- views -> response
- response -> process response []
- 逐一进行pprocess response
1.3 把它写成中间件
- 创建middleware.py文件。
from flask import request
def load_middleware(app):
"""
统计
优先级
反爬
频率
用户认证
用户权限
"""
@app.before_request
def before():
print("中间件", request.url)
@app.after_request
def after(res):
# 一定要有返回
print("after", res)
print(type(res))
return res
- 改__init__.py文件
from flask import Flask
from App.views import blue
from App.ext import init_ext
from App.settings import envs
from App.middleware import load_middleware
def create_app(env):
app = Flask(__name__)
app.register_blueprint(blue)
app.config.from_object(envs.get(env))
init_ext(app=app)
load_middleware(app=app)
return app
1.4 四大内置对象(g和Config(又称app))
- cookie和session已经在前面讲过了。
- g 可以用来跨函数传递数据的。
- 无论哪种服务器,为每个用户的请求创建一个线程(内部维护一个线程池)。变量数据是隔离开的。
@blue.before_request
def before():
g.msg = "hhd"
print(request.url)
@blue.after_request
def after(res):
print(g.msg)
return g.msg
- config. 它实际上是我们的App的配置信息
<ul>
{% for con in config %}
<li>{
{ con }}={
{ config|con] }}</li>
{% endfor%}
</ul>
from flask import request
from flask import current_app
# 这里直接导入的config, 并不是四大内置对象的config.
# 从flask 中导入 request
@blue.before_request
def before():
conf = current_app.config
keys = conf.keys()
for key in keys:
print(key, conf[key])
print(request.url)
第二节 注册登录-数据加密
2.1 注册登录基础设计
- 前端的加密是为了数据传输安全,后台加密为了防家贼(后台开发人员)。
- 注册登录基础设计如下。
# models.py
from werkzeug.security import check_password_hash
class Student(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
s_name = db.Column(db.String(15), unique=True)
s_password = db.Column(db.String(256))
def check_password(self, password):
return check_password_hash(self.s_password, password)
# views.py
@blue.route('/student/register/', methods=['GET', 'POST'])
def student_register():
if request.method == "GET":
return render_template("student_register.html")
if request.method == "POST":
username = request.form.get("username")
password = request.form.get("password")
hash_pwd = generate_password_hash(password)
student = Student()
student.s_name = username
student.s_password = hash_pwd
db.session.add(student)
db.session.commit()
return "注册成功"
@blue.route('/student/login/', methods

最低0.47元/天 解锁文章
424

被折叠的 条评论
为什么被折叠?



