一、 标准类视图
#coding: utf8
from flask import Flask,views,request-----------------------------------------------------------步骤1
import flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
#2.创建要映射到视图的类(必须继承views.View)
-------------------------------------------------------步骤2
class LoginView(views.View):
#3.必须实现
dispatch_request(self)方法(此方法的任务相当于普通的函数视图)---------------------------步骤3
def dispatch_request(self):
return 'Login page'
#4.建立url与视图类的映射
--------------------------------------------------------------------------步骤4
#endpoint: 用来给
`url_for`反转作为名称的。如果没有给
`endpoint`,那么将会使用
`as_view(name)`中
`name`这个参数来作为反转
#view_func:将类视图转换为函数视图
app.add_url_rule('/login/',endpoint='point_end',view_func = LoginView.as_view('ppoint_fun'));
#2.Url_for反转
with app.test_request_context():
print flask.url_for('point_end')
if __name__ == '__main__':
app.run()
二、 基于调度方法的类视图:
1. 必须继承自`views.MethodView`。2. 实现`get`函数来响应`get`请求的代码。3. 实现`post`函数来响应`post`请求的代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
<table>
<tbody>
<tr>
<td>用户名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td></td>
<td><input type="submit"></td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
@app.route('/')
@login_required
def hello_world():
return 'Hello World!'
# 基于调度(get和post)的类视图
class LoginView(views.MethodView):
def get(self):
return flask.render_template('login.html')
def post(self):
username = flask.request.form.get('username')
password = flask.request.form.get('password')
print 'username:',username
print 'password:', password
return u'登录成功'
app.add_url_rule('/login/',view_func=LoginView.as_view('login'))
if __name__ == '__main__':
app.run(debug=True)
三、为类视图添加自定义装饰器
#coding: utf8
from flask import Flask,views
import flask
app = Flask(__name__)
# -----------------自定义的装饰器---------------------
def login_required(func):
def decorator(*args,**kwargs):
username = flask.request.args.get('username')
if username and username == 'xt':
return func(*args,**kwargs)
else:
return flask.redirect('login')
return decorator
# 函数视图
@app.route('/regist/')
@login_required-----------------------装饰器使用方式01
def regist_view():
return 'regist view'
# 类视图
class ListView(views.View):
decorators = [login_required]------装饰器使用方式02
def dispatch_request(self):
return 'list page'
app.add_url_rule('/list/',endpoint='list',view_func=ListView.as_view('list'))
if __name__ == '__main__':
app.run(debug=True)