1,Python现阶段三大主流web框架Django, Tornado, Flask对比
- Django主要特点是大而全,集成了很多组件,列如:Models Admin Form等等,不管用得用不着反正它全部都有,属于氢能型框架
- Tornado主要特点是原生异步非阻塞,在IO密集型应用和多任务处理上占据绝对性的优势,属于专注型框架
- Flask主要特点小而轻,原生组件几乎为0,三方提供的组件请参考Django非常全面,属于短小精悍型框架,
- Django通常用于大型web应用由于内置组件足够强大所以使用Django开发了可以一气呵成,
- Tornado通常用于API后端应用,游戏服务后台,其内部实现的异步非阻塞,非常适合,
- Flask通常应用于小型应用和快速构建应用,其强大的三方库,足以支撑一个大型的文本应用
- Django优点是大而全,缺点是资源加载的太多,会造成一定的资源浪费
- Tornado优点是异步,缺点是干净,session都不支持
- Flask优点是简单精悍,缺点是不够稳定
2,Flask的安装
pip install Flask
千万不要用pycharm创建Flask项目,它会自动给设置环境变量
创建py文件导入Flask即可
from flask import Flask, request, render_template, jsonify,send_file, session, Markup, redirect import json app = Flask(__name__) app.secret_key = "xuexue" # app.config["SERVER_NAME"] = "oldboy.com" STUDENT = {'name': 'Old', 'age': 38, 'gender': '中'} STUDENT_LIST = [ {'name': 'Old', 'age': 38, 'gender': '中'}, {'name': 'Boy', 'age': 73, 'gender': '男'}, {'name': 'EDU', 'age': 84, 'gender': '女'} ] STUDENT_DICT = { 1: {'name': 'Old', 'age': 38, 'gender': '中'}, 2: {'name': 'Boy', 'age': 73, 'gender': '男'}, 3: {'name': 'EDU', 'age': 84, 'gender': '女'} } #########################################特殊装饰器############################################ @app.template_global() def ab(a, b): return a+b @app.template_filter() def axb(a,b): return a*b ##################################flask的三剑客以及请求的相关的数据############################## # redirect # render_template # "我的头可不是面团捏的" HttpResponse @app.route("/") def index(): return "我的头可不是面团捏的" @app.route("/login", methods=["GET", "POST"]) def login(): if request.method == "GET": print(request.method) # GET print(request.form) # ImmutableMultiDict([]) print(request.args.to_dict()) # 存放在url上的参数{'page': '2'} print(request.host) # 127.0.0.1:8080,主机和端口 print(request.host_url) # http://127.0.0.1:8080/ 主机+端口+http print(request.path) # /login url除了主机和端口 return render_template("login.html") if request.method == "POST": print(request.form) # ImmutableMultiDict([('user', 'xuexue'), ('pwd', 'xuexue23235')]) print(request.form.to_dict()) # {'user': 'xuexue', 'pwd': 'xuexue23235'} print(request.json) # Nonejson放json数据格式 print(request.data) # b''放二进制的数据的 user_info = request.form.to_dict() if user_info.get("user") == "xuexue" and user_info.get("pwd") == "xuexue123": return "登录成功" return "用户名或密码错误" @app.route("/register", methods=["GET", "POST"]) def register(): if request.method == "GET": return render_template("register.html") else: # 获取提交的注册的数据 user = request.form.to_dict().get("user") pwd = request.form.to_dict().get("pwd") # 写入到数据库中 # orm 操作 # return json.dumps({"name": "xuexue", "pwd": "miss"}) # {"name": "xuexue", "pwd": "miss"} return jsonify({"name": "xuexue", "pwd": "miss"}) # { # "name": "xuexue", # "pwd": "miss" # } ##############################################模板语言########################### @app.route("/model", methods=["GET", "POST"]) def model(): if request.method == "GET": return render_template("file.html") # return send_file("1.png") else: file = request.files.get("filename") file.save(file.filename) return send_file("xuexue.png") @app.route("/sess") def sess(): inp = Markup("<input type='text'>") session["user"] = "xuexue" if session.get("user"): print(session) # <SecureCookieSession {'user': 'xuexue'}> # return render_template("xuexue.html", inp=inp, stu=STUDENT) # return render_template("xuexue.html", inp=inp, stu=STUDENT_LIST) return render_template("index.html", inp=inp, stu=STUDENT_DICT) return redirect("/login") # @app.route("/sesss", redirect_to="/sess") # # def miss(): # # return "太多的理由,太多的借口" @app.route("/info", subdomain="xuexue") def miss(): return "太多的理由,太多的借口" app.run(host="0.0.0.0", port=8080, debug=True)
- 启动:
- from falsk import Flask
- app = Flask(__name__)
- app.run("0.0.0.0", 5000, debug=True)
- 加入路由
- @app.route("/",methods=["GET", "POST]")
- def home():
- return "xuexue"
- def home():
- @app.route("/",methods=["GET", "POST]")
- Response三剑客 + 小儿子
- HTTPResponse return "xueren"
- from flask import redirect
- redirect: return redirect("/")
- from flask import render_template
- render: return render_template - templates
- 小儿子
- from flask import send_file,jsonify
- renturn send_file() # 打开并返回文件内容
- return jsonify() Content-Type: application/json
- request
- from flask import request
- request.form 表单数据,FormData字典数据to_dict()
- request.args URL中的参数,数据
- request.json Content-Type:applications/json请求头
- request.data Content-Type不被认可, 将原始数据存放在data中是bytes类型
- request.values存放FromDate URL 一般情况下不要用,有坑,如果url和form表单中name命名一样,url中的数据就会覆盖form表单的数据
- request.files获取文件save保存
- request.method 请求的方法
- request.path请求的路径
- jinjia2:{{ }}引用和执行
- {%%}逻辑代码
- session:Falsk-session
- 将session加密后存放在浏览器的Cookie
- from flask import session
- app.secret_key = "雪雪"
- session["user"] = "雪人"
- session.get("user")
- 写装饰器 基于session验证用户有效性
来源:https://www.cnblogs.com/ljc-0923/p/10265377.html