flask之 类视图

类视图

类视图和视图函数的区别在于,类视图可以继承,但类视图写完之后需要进行注册。

标准类视图

  • 标准类视图继承自flask.views.View
  • 标准类视图的注册:app.add_url_rule(rule,endpoint,view_func)
    -标准类视图必须重写dispatch_request方法 ,不然会报错,返回NotImplementError类型错误

在这里插入图片描述

app.add_url_rule()

三个常用的参数:

  • rule:路由地址(访问时用)
  • endpoint:使用url_for()函数获取路由时的第一个参数,也可以不指定
  • view_func:函数名称(不需加括号)

标准类视图的使用

from flask import Flask,render_template,views,url_for,redirect

app = Flask(__name__)

@app.route('/')
def HomePage():
    return 'Welcome to my HomePage~'

# @app.route('/Dict/')
# def Dict():
#     return redirect(url_for('List'))

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

class DictView(views.View):
    def dispatch_request(self):
        return redirect(url_for('List'))

class ListView(views.View):
    def dispatch_request(self):
        return render_template('html/index.html')

app.add_url_rule('/index.html/', view_func=ListView.as_view('List'))
app.add_url_rule('/Dict/', view_func=DictView.as_view('Dict'))
# View.as_view('名称'):指定视图的dispatch_request函数,名称自定义
# 如果ListView.as_view,就是指ListView标准类视图的dispatch_request函数

if __name__ == '__main__':
    app.run(debug=True)

View.as_view(‘名称’):指定视图的dispatch_request函数,名称可以自定义。例如:如果是ListView.as_view,就是指ListView标准类视图的dispatch_request函数。

基于调度方法的类视图

flask还提供了另外一种类视图(flask.views.MethodView),对每个访问HTTP的方法执行不同的函数(映射到每个方法的同名小写方法上)

class LoginView(views.MethodView):
    def get(self, name=None, error=None):
        return render_template('html/login.html',name=name,error=error)

    def post(self):
        name = request.form.get('name')
        password = request.form.get('password')
        if name == 'Sleet' and password == '123456':
            return self.get(name=name)
        else:
            return self.get(error='账号或者密码错误')

装饰器装饰类视图

1、创建一个类视图

def setting_decorate(func):
    def wrapper(*args,**kwargs):
        name = request.args.get('name')
        if name:
            return func(*args,**kwargs)
        else:
            return redirect(url_for('login'))
    return wrapper

2、在类视图使用装饰器

在类视图定义一个属性:decorate = [装饰器名称]

每次调用该类视图,就会执行这个装饰器

class SettingView(views.View):

    decorators = [setting_decorate]

    def dispatch_request(self):
        return '个人中心'
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值