1,040
社区成员
发帖
与我相关
我的任务
分享这是我参加朝闻道知识分享大赛的第12篇文章
def list(): return "list-----" app.add_url_rule('/list/', endpoint="zhiliao", view_func=list)
app.add_url_rule 用于手动添加 URL 规则。
endpoint 参数用于指定端点名称,方便在模板中使用 url_for。
from flask import views
class New(views.View):
def dispatch_request(self):
return render_template("news.html")
app.add_url_rule('/news/', view_func=New.as_view("news"))
views.View 是 Flask 提供的基类,用于创建基于类的视图。
dispatch_request 方法用于处理请求。
as_view 方法将类转换为视图函数。
class Base(views.View):
def __init__(self):
super(Base, self).__init__()
self.context = 'hh'
class A(Base):
def dispatch_request(self):
return self.context + '1'
class B(Base):
def dispatch_request(self):
return self.context + '2'
app.add_url_rule('/a/', view_func=A.as_view("a"))
app.add_url_rule('/b/', view_func=B.as_view("b"))
通过构造函数初始化共享的属性。
子类继承基类并实现 dispatch_request 方法。
class Josondata(views.View):
def get_data(self): # 虚函数
return ''
def dispatch_request(self):
return self.get_data()
class List(Josondata):
def get_data(self):
node = {
"name": "lazi",
"age": 18
}
return node
app.add_url_rule('/js/', endpoint="jj", view_func=List.as_view('js'))
基类定义虚函数 get_data。
派生类重写 get_data 方法以提供具体实现。
class Form(views.MethodView):
def get(self, error=None):
return render_template("index.html", error=error)
def post(self):
password = request.form.get("password")
username = request.form.get("username")
if password == "1" and username == "2":
return "登录成功"
else:
return self.get(error=True)
app.add_url_rule("/login/", view_func=Form.as_view("Form"))
views.MethodView 支持不同的 HTTP 方法(如 GET、POST)。
根据请求方法调用相应的方法。
@app.route('/')
@login_request
def hello_world():
return "hello world"
装饰器 login_request 用于在访问视图函数前进行权限检查。
class New(views.View):
decorators = [login_request]
def dispatch_request(self):
return render_template("news.html")
app.add_url_rule('/news/', view_func=New.as_view("news"))
decorators 属性用于在类级别添加装饰器。
from functools import wraps
def login_request(func):
@wraps(func)
def inner(*args, **kwargs):
name = request.args.get("name")
if name:
return func(*args, **kwargs)
else:
return "请先登录"
return inner
wraps 装饰器用于保留原始函数的元数据。
login_request 装饰器检查请求参数 name,如果存在则继续执行原函数,否则返回提示信息。