一 flask 介绍

flask是一款micro web 服务器

介绍

轻量级服务器是指服务器剔除了一些功能,这样服务器在部署,运行时开销就会降低,变得很轻。
这里的micro web 服务器是指flask为了保持core简单,但是功能是可以扩展的。也就是说flask只提供了核心的web server 功能。
flask没有提供database abstraction layer, form validation, upload handling等其它功能,但是却提供了扩展来支持这些功能。

1 开始Hello, World!

code

from flask import Flask

app = Flask(name)
#Flask 实例实现了WSGI(Web Server Gateway Interface)接口,
name作为参数是为了查找templates, static files等等。更多的信息参考flask文档。

@app.route(‘/’)
def hello_world():
return ‘Hello, World!’
#使用route decorator使用指定的URL来触发function

run server

set FLASK_APP=01_hello.py
set FLASK_ENV=development
开启debug模式
flask run –host=0.0.0.0
指定server在所有public IPs监听

browser

http://127.0.0.1:5000/

2 Routing

使用 route() decorator 绑定a function 到 a URL.@app.route(‘/’)
br/>@app.route(‘/’)
return ‘Hello, World!’

3 Variable Rules

位URL指定参数,可选地还可以指定类型。最后传给函数。

@app.route(‘/user/<username>’)
def show_user_profile(username):
return ‘User %s’ % (username,)

@app.route(‘/post/<int:post_id>’)
def show_post(post_id):
return ‘post %d’ % (post_id,)

案例:@app.route(‘/user/<username>’)
br/>@app.route(‘/user/<username>’)
def show_user_profile(username):
return ‘User %s’ % (username,)

@app.route(‘/post/<int:post_id>’)
def show_user_profile(post_id):
return ‘post %d’ % (post_id,)
报错:
AssertionError: View function mapping is overwriting an existing endpoint function: show_user_profile
原因:
两个URL绑定到一个view function, flask认为我们队view function进行了overwriting

4 Unique URLs / Redirection Behavior

@app.route(‘/projects/’)
如果请求URL为/projects,这是会redirect到/projects/
请求会响应一个308,然后再响应一个200

note: URL 匹配规则为由上向下

案例:@app.route(‘/post/<int:post_id>/’)
br/>@app.route(‘/post/<int:post_id>/’)
return ‘post %d’ % (post_id,)

@app.route(‘/post/<int:post_id>’)
def show_post_profile(post_id):
return ‘post profile %d’ % (post_id,)

结果:
不管请求是post/2 还是post/2/,只有show_post响应。

方案: 调换两个view function的顺序。

5 URL Building

建立一个对应function的URL
用法:
第一个参数: function name
后面的key arguments对应URL variables
未知的arguments对应URL query variables

案例:
with app.test_request_context():
print(url_for(‘index’))
print(url_for(‘show_user_profile’,username=’test’))
print(url_for(‘show_user_profile’,username=’test’,key=’value’))
输出:
/
/user/test
/user/test?key=value

6 HTTP Methods

处理不同的请求,需要为route()指定methods参数

案例:@app.route(‘/login’)
br/>@app.route(‘/login’)
return render_template(‘login.html’)
请求:
http://127.0.0.1:5000/login
输出:
405 Method Not Allowed
原因:
@app.route(‘/login’) 默认只处理GET请求,不处理POST请求

7 Rendering Templates

使用render_template函数render a template
第一个参数:html template
后面的key arguments,为传递给template的变量

上下文传递:
server -> template
browser form, URL variables -> server
redirect(URL Building) –> browser

案例:
def index():
user = ”
if request.method == ‘POST’:
user = request.form[‘user’]
return render_template(‘index.html’,user=user)
else:
return render_template(‘index.html’,user=user)

<!doctype html>
<title> Hello from Flask</title>
<% if user %>
<h2> Hello {{ user }}!</h2>
<% else %>
<h2> index page!</h2>
<% endif %>

8 Accessing Request Data

context locals

9 The Request Objec

通过全局变量request获取browser传递的消息
例如:
form:
request.form[‘username’]
parameters:
searchword = request.args.get(‘key’, ”)
cooks:
headers:

原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/191172.html

(0)
上一篇 2021年11月14日
下一篇 2021年11月14日

相关推荐

发表回复

登录后才能评论