文章目录
技巧:pycharm解决端口被占用的问题:不要同时运行多个py文件
清除页面缓存:ctrl+shift+r
一、标准类视图
作用:
1、大大减少了路由的书写
2、可以继承父类的许多方法,减少代码冗余
模板
- 需要在flask中导入views基类
标准类视图是继承自flask.views.View,并且在子类中必须实现dispatch_request方法,这个方法类似于视图函数,也要返回一个基于Response或者其子类的对象
from flask import Flask,url_for,views,jsonify
class firstView(views.View):
def dispatch_request(self):
return '这是在做一个测试,通过啦!(这是类视图)'
# 类视图通过add_url_rule方法和url作映射
app.add_url_rule('/first/',view_func=firstView.as_view('first'))
案例
# 导入flask 导入views:类视图的父类 导入jsonify:返回json数据(json就是前后端交互的数据,后端给前端)
from flask import Flask,url_for,views,jsonify
# 创建flask的实例对象
app = Flask(__name__)
# 视图函数
@app.route('/')
def index():
# print(url_for('genren')) # 更改url的地址 /profile/
return '首页'
# @app.route('/profile/')
def profile2():
return '个人中心'
# 类视图 导入包views 继承父类views.View
# 一定要重写父类,加上dispatch_request,否则会报错
# 而且在父类中return值!
class ListView(views.View):
def dispatch_request(self):
return '这是在做一个测试,通过啦!(这是类视图)'
# def demo(self):
# return '这是做一个测试'
# 模拟抛出异常的方式 get_reponse
# 继承views.View get_response可以被子重写 抛出异常
class JsonView(views.View):
def get_response(self):
raise NotImplementedError
def dispatch_request(self):
response = self.get_response()
return jsonify(response)
# 继承JsonView 重写 get_response
class ListJsonView(JsonView):
def get_response(self):
return {
'username':'xiaohuahua'}
# 以下add_url_rule方法,也可以映射视图函数 endpoint 将原url中profile的名该别名为genren 不过默认为其路由本身
# 注意要写在视图、类视图的下面
app.add_url_rule('/profile/',view_func=profile2,endpoint='genren')
app.add_url_rule('/list/',endpoint='list',view_func=ListView.as_view('list'))
app.add_url_rule('/listjson/',view_func=ListJsonView.as_view('listjson'