pythonFlask框架的视图函数

Posted sysu_lluozh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pythonFlask框架的视图函数相关的知识,希望对你有一定的参考价值。

一、Django中的CBV模式

二、Flask中的CBV和FBV

def auth(func):
    def inner(*args, **kwargs):
        result = func(*args, **kwargs)
        return result
    return inner

class IndexView(views.MethodView):
    # methods = ['POST']  #只允许POST请求访问
    decorators = [auth,]  # 如果想给所有的get,post请求加装饰器,就可以这样来写,也可以单个指定

    def get(self):   #如果是get请求需要执行的代码
        v = url_for('index')
        print(v)
        return "GET"

    def post(self):  #如果是post请求执行的代码
        return "POST"

app.add_url_rule('/index', view_func=IndexView.as_view(name='index'))  #name即FBV中的endpoint,指别名

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

三、类视图及其使用

视图函数不能面向对象编程,利用类视图来代替视图函数来解决这个问题

  • 导入视图类 View
from flask.views import View
  • 编写一个视图子类
class MyView(View): # MyView继承于View

    def test(self):  #  自定义的方法
        return '测试类视图'

    def dispatch_request(self):   # 必须重写这个方法
        resp = self.test()
        return resp
  • 利用View子类获取到一个视图方法
MyView.as_view('test')

注意:.as_view方法的放回值是一个方法,而且该方法的名字就是传进去的参数

  • 将获取到的视图方法和路径对应起来
app.add_url_rule('/test/', view_func=MyView.as_view('test')) 
# MyView.as_view('test') 返回的是一个方法
  • 类视图的原理

把as_view方法返回的结果赋值给view_func
as_view方法返回的是一个方法(注意:as_view方法传入的参数就是as_view返回的那个方法的名字),该方法会调用dispatch_request方法
一旦路由进来,就会调用dispatch_request方法
类视图的目的就是实现逻辑分离、方便管理

from flask import Flask
from flask.views import View

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World'

class MyView(View): # MyView继承于View

    def test(self):  #  自定义的方法
        return '测试类视图'

    def dispatch_request(self):   # 必须重写这个方法
        resp = self.test()
        return resp


app.add_url_rule('/test/', view_func=MyView.as_view('test')) # MyView.as_view('test') 返回的是一个方法

print(app.url_map)

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

# 把as_view方法返回的结果赋值给view_func
# as_view方法返回的是一个方法(注意:as_view方法传入的参数就是as_view返回的那个方法的名字),该方法会调用dispatch_request方法
# 一旦路由进来,就会调用 dispatch_request 方法
# 类视图的目的就是实现逻辑分离、方便管理
  • 方法视图及其使用

利用视图函数实现不同的请求执行不同的逻辑时比较复杂,需要在视图函数函数中进行判断;如果利用方法视图实现就比较简单

@app.route('/test/', methods=['GET', 'POST'])
def test():
    if request.method == 'GET':
        # 做GET的事情
        pass
    elif request.method == 'POST':
        # 做POST的事情
        pass
    return '测试'
  • 导入方法视图类
from flask.views import MethodView
  • 创建方法视图子类
class TestMethodView(MethodView):
    def get(self):
        # 处理Get请求
        return 'GET请求'
    def post(self):
        # 处理post请求
        return 'POST请求'

注意:视图类中的方法就是支持的请求类型

  • 利用方法视图子类创建一个视图函数
TestMethodView.as_view('testMethodView')

注意:as_view返回的是一个视图函数,而且该视图函数逇名称就是传进去的参数

  • 将获取到的视图方法和路径对应起来
app.add_url_rule('/test02/', view_func=TestMethodView.as_view('testMethodView'))
from flask import Flask
from flask import request
from flask.views import MethodView

app = Flask(__name__)

@app.route('/')
def index():
    return '测试主页面'

@app.route('/test/', methods=['GET', 'POST'])
def test():
    if request.method == 'GET':
        # 做GET的事情
        pass
    elif request.method == 'POST':
        # 做POST的事情
        pass
    return '测试'

class TestMethodView(MethodView):
    def get(self):
        # 处理Get请求
        return 'GET请求'
    def post(self):
        # 处理post请求
        return 'POST请求'

app.add_url_rule('/test02/', view_func=TestMethodView.as_view('testMethodView'))
# method = TestMethodView.as_view('testMethodView');
# app.add_url_rule('/test02/<name>/', view_func=method, methods=['GET'])

print(app.url_map)

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

以上是关于pythonFlask框架的视图函数的主要内容,如果未能解决你的问题,请参考以下文章

pythonFlask之模板引擎

pythonFlask之模板引擎

pythonFlask之模板引擎

004:pythonFlask框架学习

pythonFlask框架的基本使用

pythonFlask框架的基本使用