zoukankan      html  css  js  c++  java
  • 初识 flask

    1,Python现阶段三大主流web框架Django, Tornado, Flask对比

    1. Django主要特点是大而全,集成了很多组件,列如:Models Admin Form等等,不管用得用不着反正它全部都有,属于氢能型框架
    2. Tornado主要特点是原生异步非阻塞,在IO密集型应用和多任务处理上占据绝对性的优势,属于专注型框架
    3. Flask主要特点小而轻,原生组件几乎为0,三方提供的组件请参考Django非常全面,属于短小精悍型框架,
    4. Django通常用于大型web应用由于内置组件足够强大所以使用Django开发了可以一气呵成,
    5. Tornado通常用于API后端应用,游戏服务后台,其内部实现的异步非阻塞,非常适合,
    6. Flask通常应用于小型应用和快速构建应用,其强大的三方库,足以支撑一个大型的文本应用
    7. Django优点是大而全,缺点是资源加载的太多,会造成一定的资源浪费
    8. Tornado优点是异步,缺点是干净,session都不支持
    9. 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)
    1. 启动:
      • from falsk import Flask
      • app = Flask(__name__)
      • app.run("0.0.0.0", 5000, debug=True)
    2. 加入路由
      • @app.route("/",methods=["GET", "POST]")
        • def home():
          • return "xuexue"
    3. 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
    4. 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请求的路径
    5. jinjia2:{{  }}引用和执行
    6. {%%}逻辑代码
    7. session:Falsk-session
      • 将session加密后存放在浏览器的Cookie
      • from flask import session
      • app.secret_key = "雪雪"
      • session["user"] = "雪人"
      • session.get("user")
    • 写装饰器 基于session验证用户有效性
  • 相关阅读:
    as3单播放mp3的cpu占用和windows上的media player差不多,占用很低
    Flash的Socket
    30个高质量的免费jquery滑块PSD文件
    40个创意的女性图片照片处理实例
    40个高品质各行各业免费3D样式PSD图标文件分享
    25美丽大气的jQuery滑块插件推荐
    40个金黄色的夏季摄影色彩推荐
    GNU make manual 翻译( 一百七十二)
    GNU make manual 翻译( 一百七十四)
    GNU make manual 翻译( 一百七十三)
  • 原文地址:https://www.cnblogs.com/ljc-0923/p/10265377.html
Copyright © 2011-2022 走看看