zoukankan      html  css  js  c++  java
  • flask路由+视图

    一、路由

    @app.errorhandler(404)
    def not_found(arg):
        print(arg)
        return "没找到"
    
    @app.route('/index')
    def index():
        return "Index"
    
    ########### 添加路由的第二种方式 ###########
    def test():
        return "Test"
    
    app.add_url_rule("/test", None, test)
    
    # flask中app.route函数会执行add_url_rule方法,一般只需要用第一种方法即可,第二种方法一般用于CBV中。

    二、参数

    rule,                       URL规则
    view_func,                  视图函数名称
    endpoint=None,              名称,用于反向生成URL,即: url_for('名称')
    methods=None,               允许的请求方式,如:["GET","POST"]
    strict_slashes=None,        对URL最后的 / 符号是否严格要求,
    redirect_to=None,           重定向到指定地址
    
    defaults=None,              默认值,当URL中无参数,函数需要参数时,使用defaults={'k':'v'}为函数提供参数
    subdomain=None,             子域名访问

    三、CBV

    例:

    from flask import Flask, views
    import functools
    
    app = Flask(__name__)
    
    @app.route("/index")
    def index():
        return "index"
    
    class UserView(views.MethodView):
        methods = ["GET"]
        #decorators = ['wrapper'] # 为所有class中的方法批量添加装饰器
        def get(self,*args,**kwargs):
            return "get"
    
        def post(self,*args,**kwargs):
            return "post"
    
    app.add_url_rule("/user",None,UserView.as_view("xxxxxx"))
    
    if __name__ == '__main__':
        app.run()

    四、自定义正则

    from flask import Flask,url_for
    
    app = Flask(__name__)
    
    # 步骤一:定制类
    from werkzeug.routing import BaseConverter
    class RegexConverter(BaseConverter):
        """
        自定义URL匹配正则表达式
        """
    
        def __init__(self, map, regex):
            super(RegexConverter, self).__init__(map)
            self.regex = regex
    
        def to_python(self, value):
            """
            路由匹配时,匹配成功后传递给视图函数中参数的值
            :param value:
            :return:
            """
            return int(value)
    
        def to_url(self, value):
            """
            使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
            :param value:
            :return:
            """
            val = super(RegexConverter, self).to_url(value)
            return val
    
    # 步骤二:添加到转换器
    app.url_map.converters['reg'] = RegexConverter
    
    """
    1. 用户发送请求
    2. flask内部进行正则匹配
    3. 调用to_python(正则匹配的结果)方法
    4. to_python方法的返回值会交给视图函数的参数
    
    """
    
    # 步骤三:使用自定义正则
    @app.route('/index/<reg("d+"):nid>')
    def index(nid):
        print(nid,type(nid))
    
        print(url_for('index',nid=987))
        return "index"
    
    if __name__ == '__main__':
        app.run()

    五、blueprint(蓝图)

    目标:给开发者提供目录结构
    其他:
    - 自定义模板、静态文件
    - 给某一类url添加前缀
    - 给某一类url添加before_request

    步骤:

    1.创建项目名称bulueprint
    2.在项目目录里面创建与项目一样的目录bulueprint
    3.在二级bulueprint目录创建__init__.py文件
        from flask import Flask
    
        def create_app():
            app = Flask(__name__)
    
        return app
    4.在项目目录下创建manage.py文件
        from blueprint import create_app
    
        app = create_app()
    
        if __name__ == '__main__':
            app.run()
    5.在二级目录bulueprint下创建目录views.py,里面定义我们自己的模块。这里创建account.py文件。
    from flask import Blueprint, render_template
    
    # template_folder可自定义模板目录,但是优先从templates目录查找
    ac = Blueprint("ac",__name__)
    
    # 为单独的请求添加装饰器,这里为只处理ac跳转的路由
    @ac.before_request
    def x1():
        print('before_request')
    
    @ac.route('/login')
    def login():
        return render_template("login.html")
    6.在__init__.py文件中引入模块,并注册。
    from flask import Flask
    from .views.account import ac
    
    def create_app():
        app = Flask(__name__)
    
        app.register_blueprint(ac)
        # url_prefix,强行添加前缀,访问http://127.0.0.1:5000/api/list,可以用于控制版本
        return app
    7.像django一样,在二级目录bulueprint下创建目录templates和static,定义静态资源。

     

  • 相关阅读:
    pycharm快捷键及一些常用设置
    常用笔记
    python开发之路day01
    [转]C++ Unicode SBCS 函数对照表
    PB15151793+PB16001775
    《梦断代码》读书笔记——第四周
    《人件》读书笔记——第三周
    《人月神话》读书笔记——第一周
    软件工程个人作业——词频统计
    《创新者》读书笔记——第五周读书笔记
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/11048044.html
Copyright © 2011-2022 走看看