基于调度方法的视图
Flask还为我们提供了另外⼀种类视图flask.views.MethodView,对每个HTTP
⽅法执⾏不同的函数(映射到对应⽅法的⼩写的同名⽅法上)
就是定义请求服务器的方法(get,post等)
- 我们定义一个LoginView类,继承MethodView方法
from flask import Flask,views,render_template
app = Flask(__name__)
@app.route('/')
def index():
return '首页'
class LoginView(views.MethodView):
def get(self):
return render_template('login.html')
app.add_url_rule('/login/',view_func=LoginView.as_view('login'))
if __name__ =='__main__':
app.run(debug=True)
- 定义一个get方法,然后打开网址
- 我们用post请求访问一下试试
- 我们再来尝试一下post请求,定义一个post方法
class LoginView(views.MethodView):
def get(self):
return render_template('login.html')
def post(self):
name = request.form.get('name')
password = request.form.get('password')
if name == 'zaaaacki' and password == 456:
return '登录成功'
else:
return '账号密码错误'
- 注意我们的password后面对的456没有引号不是字符串,我们尝试访问一下网页
- 访问失败
- 我们在把456加上引号,访问网页
- 访问成功,所以我们得出结论,在页面中输入的456是字符串形式的
- 我们来定义一个账号密码错误的提示页面
def post(self):
name = request.form.get('name')
password = request.form.get('password')
if name == 'zaaaacki' and password == '456':
return '登录成功'
else:
return render_template('login.html',error='账号密码错误')
<body>
<h1>这是登陆页面</h1>
{% if error %}
<p style="color:red">{
{ error }}</p>
{% endif %}
</body>
- 打开网页,输入错的密码
- 再做一下优化
- 给我们的get函数再传入一个error参数,在我们get函数中返回error
- 在post函数中定义如果账号密码错误,调用get('账号密码错误')函数
class LoginView(views.MethodView):
def get(self,error):
return render_template('login.html',error=error)
def post(self):
name = request.form.get('name')
password = request.form.get('password')
if name == 'zaaaacki' and password == '456':
return '登录成功'
else:
return self.get('账号密码错误')
<body>
<h1>这是登陆页面</h1>
{% if error %}
<p style="color