Flask框架适用于python语言,很好的web开发框架
这里用一个简单的网站应用来展示flask的使用方法:
# -*- encoding = UTF-8
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/user/')
def show_user_profile(username):
return 'User %s' % username
@app.route('/post/')
def show_post(post_id):
return 'Post %d' % post_id
if __name__ == '__main__':
app.run(debug=True)
代码运行结果展示:
可以看到在本地端服务器已经跑起来了,同时通过浏览器访问 http://127.0.0.1:5000/会得到:
访问http://127.0.0.1:5000/ user/sunbowl 会得到:
访问http://127.0.0.1:5000/post/123 会得到:
在这个小的应用里,值得注意的是路由的使用,即@app.route()。这个路由便是之前说的装饰器,也就是说flask通过装饰器来识别用户需要访问的网址路径,并在对应的网址路径里做对应的应用。
这里的路由对应着浏览器访问的路径,如果路由的后面不加‘/’,这个便涉及到一个叫URL重定向的问题。也就是说对于 ‘/projects/’这样的。用户在访问网址的时候如果没有加上‘/’,系统会自动添加并访问,但是如果没有定义‘/’,用户访问带‘/’的便会出现错误,这样也保证了URL的唯一性。
例子:
# -*- encoding = UTF-8
from flask import Flask
app = Flask(__name__)
@app.route('/projects/')
def projects():
return 'The project page'
if __name__ == '__main__':
app.run(debug=True)
运行结果展示:
没有加上‘/’的例子:
# -*- encoding = UTF-8
from flask import Flask
app = Flask(__name__)
@app.route('/projects')
def projects():
return 'The project page'
if __name__ == '__main__':
app.run(debug=True)
很显然,url的地址是可以被唯一确定的
为什么不在初始化的时候直接赋值url呢,那还不是因为当网站越来越大的时候,url多了的情况下,单一的去一个个修改url是一件很麻烦的事情,因此可以通过创建URL的方法,在同一个地方对所有的url进行复制修改,将省很多事。
例子:
# -*- encoding = UTF-8
from flask import Flask,url_for
app = Flask(__name__)
@app.route('/')
def index():
pass
@app.route('/login')
def login():
pass
@app.route('/user/')
def profile(username):
pass
with app.test_request_context():
print url_for('index')
print url_for('login')
print url_for('login',next='/')
print url_for('profile',username='sunbowl')
if __name__ == '__main__':
app.run(debug=True)
主要使用的是GET和POST。GET的意思就是说浏览器向服务器说,我只需要数据,你把数据发给我就行了。POST的意思就是说浏览器想要在URL上发数据,便会请求服务器,服务器必须确保数据已储存并且只储存一次。
此外还有HEAD、PUT、DELETE\OPTION
例子:
# -*- encoding = UTF-8
from flask import Flask, request
app = Flask(__name__)
@app.route('/login/', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return 'post'
else:
return 'get'
if __name__ == '__main__':
app.run(debug=True)
运行情况:
明显是请求数据,所以返回的是get