标签:modelform html rom wrapper pwd direct 分离 flask run
### Flask 是一个轻量级的框架.
# 内置了: 路由 / 视图 / 模版(jinja2) / cookie /session 中间件
# 第三方插件: wtforms / flask-session / flask-sqlalchemy
### Django 是一个Django内置了许多的功能
# 内置了:admin / orm / 模版 / form / modelform / session / cookie / 缓存 /中间件 / 信号 / 数据库的读写分离 / 分页....
### 总结:
flask短小精悍,适合小程序开发
Django适合中大型程序开发
# 1. 安装flask
pip3 install flask
# 2. flask 的 werkzeug
# werkzurg是一个wsgi,本质上提供了socket服务端,用于接收用户请求.
# django和flask一样,它们内部都没有实现socket服务端,需要依赖wsgi.
# 3. werkzurg实现网站开发
from werkzeug.wrappers import Response
from werkzeug.serving import run_simple
class Flask(object):
'''
# 面向对象的方式封装
'''
def __call__(self, *args, **kwargs):
return Response('Hellow Werkzeug!!!')
if __name__ == '__main__':
app=Flask()
run_simple('127.0.0.1',5000,app) # 第三个参数默认会加上括号执行,即调用类中的__call__方法
from flask import Flask
# 实例化一个app对象
app=Flask(__name__)
# 添加路由关系
@app.route('/index')
def index():
return 'hellow Flask'
if __name__=='__main__':
# 启动flask
app.run()
# 接收请求 request
# request.method 请求方法
# request.form post方法提交的数据
# request.args get方法提交的数据
# 返回响应 response
# 返回字符串
return 'XXX'
# 返回json
return jsonify({"k1":123})
# 路由 , methods参数
@app.route('/login',methods=['GET','POST'])
# 返回模版 render_template
# 模版资源放在templates文件夹下
# return render_template('模板文件',参数)
# 跳转 redict
return redirect(...)
### 登录校验
# -*-coding:utf-8-*-
# Author:Ds
from flask import Flask, request, render_template, redirect, session, url_for
import functools
app=Flask(__name__)
app.secret_key='1321312jkdsakljdls'
def user_login_check(fn):
@functools.wraps(fn)
def inner(*args,**kwargs):
print(inner)
if not session.get('user-info'):
return redirect(url_for('login'))
return fn(*args,**kwargs)
return inner
@app.route('/login',methods=['GET','POST'])
def login():
if request.method=='GET':
return render_template('login.html')
user=request.form.get('user')
pwd= request.form.get('pwd')
if user=='alex' and pwd=='123':
session['user-info']=user
return redirect('/index')
return render_template('login.html',error="用户或密码错误!!")
@app.route('/index',methods=['GET','POST'])
@user_login_check
def index():
# if not session.get('user-info'):
# return render_template('login.html')
data=['alex','wusir','taibai','bangzhu']
return render_template('index.html',data=data)
@app.route('/order')
@user_login_check
def order():
return '订单'
if __name__ == '__main__':
app.run()
# 模版语法
1. 基本用法与Django一致
2. jinja2的语法更趋向于python语法
# 已加密的形式放在用户的浏览器中
# 在flask中依赖secret_key,目的是保证session不被窃取
from flask import Flask, request, render_template, redirect, session, url_for
import functools
app=Flask(__name__)
app.secret_key='1321312jkdsakljdls'
@app.route('/login',methods=['GET','POST'])
def login():
if request.method=='GET':
return render_template('login.html')
user=request.form.get('user')
pwd= request.form.get('pwd')
if user=='alex' and pwd=='123':
# 设置session 的值
session['user-info']=user
return redirect('/index')
# import functools
- 位置route的下面
- 记得加functools.wraps(...) , 保留函数的元信息.
def user_login_check(fn):
@functools.wraps(fn)
def inner(*args,**kwargs):
print(inner)
if not session.get('user-info'):
return redirect(url_for('login'))
return fn(*args,**kwargs)
return inner
# 总结: 如果不加functools.wraps,导致所有的函数名将会一致. 因为默认的endpoint将不能重名
# 必须先走路由
@app.route('/index',methods=['GET','POST'])
@user_login_check
def index():
# if not session.get('user-info'):
# return render_template('login.html')
data=['alex','wusir','taibai','bangzhu']
return render_template('index.html',data=data)
before_request : 把所有的方法添加到一个列表,按照注册的顺序执行
after_request : 把所有的方法 进行 reverse倒序后,再执行
# -*-coding:utf-8-*-
# Author:Ds
from flask import Flask, request, render_template, redirect, session, url_for
app=Flask(__name__)
app.secret_key='1321312jkdsakljdls'
@app.before_first_request # 只调用一次
def f1():
print('f1')
@app.before_request
def f2():
print('f2')
@app.after_request
def f3(response):
print('f3')
return response
@app.after_request
def f4(response):
print('f4')
return response
@app.route('/login',methods=['GET','POST'])
def login():
print('login')
return 'login'
if __name__ == '__main__':
app.run()
# 结果: f1 f2 login f4 f3
标签:modelform html rom wrapper pwd direct 分离 flask run
原文地址:https://www.cnblogs.com/dengl/p/12307659.html