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,定义静态资源。

     

  • 相关阅读:
    Session的使用与Session的生命周期
    Long-Polling, Websockets, SSE(Server-Sent Event), WebRTC 之间的区别与使用
    十九、详述 IntelliJ IDEA 之 添加 jar 包
    十八、IntelliJ IDEA 常用快捷键 之 Windows 版
    十七、IntelliJ IDEA 中的 Maven 项目初体验及搭建 Spring MVC 框架
    十六、详述 IntelliJ IDEA 创建 Maven 项目及设置 java 源目录的方法
    十五、详述 IntelliJ IDEA 插件的安装及使用方法
    十四、详述 IntelliJ IDEA 提交代码前的 Code Analysis 机制
    十三、IntelliJ IDEA 中的版本控制介绍(下)
    十二、IntelliJ IDEA 中的版本控制介绍(中)
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/11048044.html
Copyright © 2011-2022 走看看