zoukankan      html  css  js  c++  java
  • Flask 第四话之视图高级类用法

    1、add_url_rule(rule, endpoint=None, view_func=None)

    注:这个方法用来添加url与视图函数的映射,如果没有填写`endpoint`,默认使用`view_func`的名字作为`endpoint`。

    app.add_url_rule('/list/',view_func=list,endpoint='list')

    2、@app.route(rule,**options):底层依然是使用add_url_rule这个函数实现路由映射的

    @app.route('/')
    def index():
        return render_template('index.html')

    一、标准类视图函数

    实例1、URL返回JSON数据

    from flask import views,jsonify
    
    class JsonView(views.View):
        def get_data(self):
            raise NotImplementedError
    
        def dispatch_request(self):
            return jsonify(self.get_data())
    
    class ListViews(JsonView):
        def get_data(self):
            return {'a':'111','b':'222'}
    
    # 第一步:匹配url,找到ListViews方法
    # 第二步:执行dispatch_request方法,找到父类JsonView =》dispatch_request()
    # 第三步:return jsonify(self.get_data()) ===》找到自己的get_data()方法 ===》转换json格式并返回数据
    app.add_url_rule('/list/',endpoint='list',view_func=ListViews.as_view(
        'list'
    ))

    实例2、多个URL获取相同数据

    from flask import views,render_template
    
    class GuangGaoViews(views.View):
        def __init__(self):
            super(GuangGaoViews,self).__init__()
            self.context = {
                'a':'广告数据'
            }
    
    class LoginViews(GuangGaoViews):
        def dispatch_request(self):
            return render_template('login.html',**self.context)
    
    class RegistViews(GuangGaoViews):
        def dispatch_request(self):
            return render_template('regist.html',**self.context)
    
    app.add_url_rule('/login/',view_func=LoginViews.as_view('login'))
    app.add_url_rule('/regist/',view_func=RegistViews.as_view('regist'))

     二、调度方法得类视图

    from flask import Flask,views,render_template,request
    
    class ListView(views.MethodView):
        """
        'get', 'post', 'head', 'options','delete', 'put', 'trace', 'patch'
        """
        def _render(self,error=None):
    
            return render_template('login.html',error = error)
    
        def get(self):
            """
            login.html:
            这是登陆页面
            <form action="" method="post">
                用户名:<input type="text" name="username">
                密码:<input type="password" name="password">
                <input type="submit" value="提交">
                {% if error %}
                    <p>{{ error }}</p>
                {% endif %}
            </form>
            :return:
            """
            return self._render()
    
        def post(self):
            username = request.form.get('username')
            password = request.form.get('password')
    
            if username == 'admin' and password == '123456':
                return render_template('index.html')
            else:
                return self._render(error="用户密码错误!")

     三、类视图使用装饰器

    1、函数视图装饰器

    from flask import Flask,request
    from functools import wraps
    
    def login_required(func):
        @wraps(func) # 保留原始属性
        def wrapper(*args,**kwargs):
            u = request.args.get('u')
            if u == 'aaa':
                return func(*args,**kwargs)
            else:
                return '请先登录'
        return wrapper
    
    @app.route('/')
    @login_required
    def index():
        return '首页'

    2、类视图装饰器

    from flask import Flask,request,views
    from functools import wraps
    
    def login_required(func):
        @wraps(func) # 保留原始属性
        def wrapper(*args,**kwargs):
            u = request.args.get('u')
            if u == 'aaa':
                return func(*args,**kwargs)
            else:
                return '请先登录'
        return wrapper
    
    class ProfileView(views.MethodView):
        decorators = [login_required] # 装饰器放在这里
        def get(self):
            return '个人中心'
    
    app.add_url_rule('/user/',view_func=ProfileView.as_view('user'))
  • 相关阅读:
    fetch jsonp请求接口
    mysql explain执行计划详解
    MySQL主从复制与读写分离 --非原创
    C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
    Mysql有没有语法可以在增加列前进行判断该列是否存在
    .net4.0注册到IIS ,重新注册IIS ,iis注册
    C#操作IIS程序池及站点的创建配置
    .net C# 对虚拟目录IIS的操作
    I​n​n​o​ ​s​e​t​u​p​ ​常​用​修​改​技​巧
    innosetup语法详解
  • 原文地址:https://www.cnblogs.com/lee-xingxing/p/12358468.html
Copyright © 2011-2022 走看看