flask简单应用
2018-11-12 本文已影响0人
山高路远_海深不蓝
flask_basic
- 文件目录结构(非快速创建的flask项目)
image.png
static: 类似django应用中的静态文件,用于存放一些资源文件,如css和js文件
templates: 存放网页模板文件
hello.py,urls.py,views.py都是自命名的功能文件,
其中urls.py的起名类似Django的urls.py(路由)文件,views.py类似Django的views.py功能函数文件.
start起步
创建一个简单的应用
- 1.hello.py文件
from flask import Flask
# 创建并返回一个WSGI应用程序对象
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'hello world!'
if __name__ == '__main__':
app.run()
app.route通过装饰器设置服务器对应的路由('/'代表根路由)
flask中路由分为动态和静态两种,静态路由即路径是一种固定格式,动态路由则可以根据用户的输入自动进行切换.
- 2.运行hello.py文件,打开浏览器输入终端显示的IP地址
image.png
- 3.静态路由
@app.route('/add/')
def add_infor():
return '用户信息添加成功'
@app.route('/show')
def show_infor():
return '用户信息查询成功'
静态路由有两种,一种是右边带有'/',一种不带,带'/'的路由可以保证用户在访问时忘记添加'/'时,服务器自动进行服务器的接收.第二种路由用户在访问时绝对不能在对应的位置添加'/'
- 4.动态路由(urls.py)
from flask import Flask, request
from views import *
app = Flask(__name__)
@app.route('/<name>/')
def path_set(name):
if name == 'login':
return show_login(request)
elif name == 'regist':
return show_regist(request)
if __name__ == '__main__':
app.run('127.0.0.1', '8000', debug=True)
name为网页地址的根路由后的下级路由例如
http://127.0.0.1:8000/login
,name为login
如果需要限制name的类型可以使用<int:name>等,但注意整形不能直接return
- 5.渲染网页(views.py)
from flask import url_for, render_template
def show_login(request):
return render_template('login.html', css_path=url_for('static', filename='css/login.css'))
def show_regist(request):
return render_template('regist.html',css_path=url_for('static', filename='css/login.css'))
render_template类似Django的render,参数request为前端请求参数,
login.html为待渲染的网页模板,css_path为给前端返回的一个路由,前端可以直接通过{{css_path}}访问
- 6.前端引用后台返回的路由(login.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
<link rel="stylesheet" href="{{css_path}}">
</head>
<body>
<form action="" method="post">
<div>
用户名: <input type="text" name="user">
</div>
<div>
<span style="letter-spacing: 1em">密</span>码:
<input type="password" name="passw">
</div>
<div>
<input type="submit" value="登录">
</div>
<div>
<a href="" target="_blank">新用户注册</a>
</div>
</form>
</body>
</html>
- 7.指定请求方式
@app.route('/post_test/', methods=['POST'])
def get_post():
'''
request: 用来存储对应的请求对象,其中methods属性获取本次请求的请求方式,values获取本次请求前端向后台
传输的数据,values对应的是一个字典类型的数据,可以通过key来获取指定的前端内容
'''
if request.method == 'POST':
print(request.values)
for key,value in request.values.items():
print(key, value)
# 对于POST来说args没有作用
# print(request.args.get('name'))
print(request.values.get('name'))
# full_path显示全路径(包含参数)
return request.path
else:
return 'error'
methods: 设置当前路由能够支持的请求方式,默认情况下只支持get.
Tip:
前端指定form表单的请求方式为post后,请求函数必须加上methods的post方式.