zoukankan      html  css  js  c++  java
  • flask基础三

    内容回顾:
        1.解决视图函数名重复的问题,装饰器返回内部函数的名称是一样, endpoint = viewfunc.__name__ ,endpoint
        
        2.flask中的路由:
            @app.route("/login")
            1.methods=("GET","POST") 允许请求方式
            2.endpoint = "反向url"  #
            3.url_for("反向url - endpoint") == "/"
            4.redirct_to = "/login" 在请求进入视图函数之前返回,跳转
            5./<arg>  动态路由参数 def index(arg)
        
        3.Flask中的配置:
            1.Flask实例配置app
                app.config.from_object(obj)
                class obj():
                    DEBUG=True,
                    REDIS=redis.Redis("127.0.0.1",6379,db=1),
                    SECRET_KEY = "123123"
                    JSONIFY_MIMETYPE="application/json"
                
            2.Flask初始化配置:
                template_folder="模板存放目录"
                static_folder = "静态文件存放目录"
                static_url_path = 默认 f"/{static_folder}" "在URL路径上所使用的地址"
        
        4.蓝图 (Buleprint)
            from flask import Buleprint
            bp = Buleprint("bluename",__name__,template_folder,static_folder,static_url_path)
            @bp.route("/blue",methods=(),endpoint)
            def bl()
                return
        
        5.before_request after_request errorhandler
            1.before_request 在请求进入视图函数之前,做出处理 @app.before_request
            2.after_request 在请求结束视图函数之后,返回客户端之前,做出处理
            def affunc(response)
            
                return response
            
            正常场景
                be1-be2-af2-af1
            异常场景
                be1-af2-af1
            
            3.errorhandler(404) 定义错误信息的返回
            def error(arg)
                return render_template
                
        6.闪现 flash
            from flask import flash , get_flashed_messages
            
            flash("123")
            flash("123")
            msg = get_flashed_messages()[0]
            
            使用一次即可消失
        
        7.send_file() jsonify
            from flask import send_file ,jsonify
            
            send_file("文件路径") 打开文件并返回客户端
            
            jsonify({k:v})    将dict序列化成json 返回给客户端之前加入一个Content-Type:application/json

    今日内容:.

    1.Flask 中的 CBV

    flask中也有CBV的:

    endpoint和as_view中的name可以相同也可以不同。as_view的name是必须写的。

    endpoint是作为 这个cbv的标识。

    如果endpoint为None,那么as_view中name作为cbv的标识。

    2.Flask中的插件 之 终于可以不用session        使用 Flask-Session

    之前flask在设置session的时候需要配置一个app.secret_key的参数,这样写就会显得不安全,使用Flask-Session插件,会将session保存在redis数据库中,相对来说比较安全。

      导入:
                from flask import Flask, session
                from flask_session import Session
                from redis import Redis
            配置:
                app.config["SESSION_TYPE"] = "redis"
                app.config["SESSION_REDIS"] = Redis(host="127.0.0.1",port=6379,db=5)
            替换:
                Session(app)
            使用:
                session["user"] = "aasdf"   设置session
                session.get("user")            获取session

     这里有个db参数,他可以是0-15的任意一个数,这个db参数就相当于把redis数据库分成16区域,各个区域不联系,如果把数据存储在0区域,在1区域取是取不到的。

    3.Flask中的插件 之 如果你不使用前后端分离的话,这东西很好用 WTForms

    html代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>这是登录页面</h1>
    <form action="post">
        <p>{{ fm.username.label }} {{ fm.username }} {{ fm.username.errors.0 }}</p>
        <p>{{ fm.password.label }} {{ fm.password }}{{ fm.password.errors.0 }}</p>
        <p><input type="submit" value="登录"></p>
    </form>
    </body>
    </html>

    这是写了一个登陆的Form,然后再写一个注册的form。

    视图函数:

    html代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="" method="post">
        {% for field in fm %}
            <p>{{field.label}} {{field}} {{field.errors.0}}</p>
        {% endfor %}
        <p><input type="submit" value="注册"></p>
    </form>
    </body>
    </html>

    总结:

    1.Flask CBV
            from flask import views
            class index(views.MethodView):
                methods = ["GET"]
                def get()
                def post()
            
            app.add_url_rule("/index",endpoint=None,view_func=index.as_view(name="index"))
            
        2.Flask-Session
            三方组件:
            from flask import session
            from flask_session import Session
            
            app.config["SESSION_TYPE"] = "redis"
            app.config["SESSION_REDIS"] = REDIS("127.0.0.1",6379,db=12)
            
            Session(app)
            
            session["key"] = "123"
            session["key"]
            
            前缀+sid(session:asdfas-fasdfasdf-asdfsafsadf)

        3.WTForms
            simple.StringField(
                label = "name"
                validators=[
                    validators.校验方法(message="")
                ]
            )
            PasswordField
            
            core.SelectMuitilField(
                label = "name"
                validators=[
                    validators.校验方法(message="")
                ],
                choices = [
                    [1,"1"],[2,"2"],[3,"3"]
                ],
                coerce = int
            )
            
            传递From
                fm = wtfFrom()
                return render_template("tem.html",fm = fm)
            
            校验:
                fm = wtfFrom(request.form)
                if fm.validate():
                    return 成功
                return render_template("tem.html",fm = fm)

  • 相关阅读:
    isequal 和startswith 使用
    UVa10340
    UVa1368
    UVa455
    UVa1225
    UVa1586
    UVa 1585
    UVa10082
    UVa272
    NYOJ1
  • 原文地址:https://www.cnblogs.com/yb635238477/p/9774959.html
Copyright © 2011-2022 走看看