Python全系列 教程
3567个小节阅读:5931.1k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
1. 基于方法的类视图,是根据请求的method
来执行不同的方法的。如果用户是发送的get
请求,那么将会执行这个类的get
方法。
如果用户发送的是post
请求,那么将会执行这个类的post
方法。其他的method类似,比如delete
、put
2. 这种方式,可以让代码更加简洁。所有和get
请求相关的代码都放在get
方法中,所有和post
请求相关的代码都放在post
方法中。就不需要跟之前的函数一样,通过request.method == 'GET'
HTML
xxxxxxxxxx
<form action="/login/" method="post">
<table>
<tr>
<td>账号:</td>
<td><input type="text" name="uname"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="pwd"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="立即登录"></td>
</tr>
<tr>
<td colspan="2">
{# <font color="red">{{ error }}</font>#}
{# 优化写法 :判断 #}
{% if error %}
<font color="red">{{ error }}</font>
{% endif %}
</td>
</tr>
</table>
</form>
python
xxxxxxxxxx
#定义一个基于方法调度的 类视图
class LoginView(views.MethodView):
def get(self):
return render_template('login.html')
def post(self):
#模拟实现
#拿到前端页面传过来的 账号 和密码 去数据库做查询操作 查询到 (跳转主页面) ,反之跳转到login.html页面并给出错误提示信息
uname = request.form['uname']
pwd = request.form['pwd']
if uname=="sxt" and pwd =="123":
return render_template('index.html')
else:
return render_template('login.html',error="用户名或者密码错误")
# 注册类视图
app.add_url_rule('/login/', view_func=LoginView.as_view('my_login'))
改进1:
xxxxxxxxxx
class LoginView(views.MethodView):
def get(self,error=None):
return render_template('login.html',error=error)
def post(self):
#模拟实现
#拿到前端页面传过来的 账号 和密码 去数据库做查询操作 查询到 (跳转主页面) ,反之跳转到login.html页面并给出错误提示信息
uname = request.form['uname']
pwd = request.form['pwd']
if uname=="sxt" and pwd =="123":
return render_template('index.html')
else:
return self.get(error="用户名或者密码错误")
# 注册类视图
app.add_url_rule('/login/',view_func=LoginView.as_view('my_login'))
改进2:
基于调度方法的类视图, 通常get()方法处理get请求,post()方法处理post请求,
为了便于管理,不推荐post方法和get方法互相调用
xxxxxxxxxx
class LoginView(views.MethodView):
def __jump(self,error=None):
return render_template('login.html', error=error)
def get(self, error=None):
return self.__jump()
def post(self):
# 模拟实现
#拿到前端页面传过来的 账号 和密码 去数据库做查询操作 查询到 (跳转主页面) ,反之跳转到login.html页面并给出错误提示信息
uname = request.form['uname']
pwd = request.form['pwd']
if uname == "sxt" and pwd == "123":
return render_template('index.html')
else:
return self.__jump(error="用户名或者密码错误")
# 注册类视图
app.add_url_rule('/login/',view_func=LoginView.as_view('my_login'))
实时学习反馈
1. 在Flask中,使用基于方法调度开发说法错误的是?
A 可以根据不同方法做不同数据处理
B 可以提高代码规范
C 可以降低耦合性
D 可以省略request.method的判断
2. 对于在Flask中,使用基于调度方法开发不能接收请求的方法名?
A get
B post
C put
D _jump
答案
1=>C 2=>D