flask
Flask是一个轻量级的基于Python的web框架。
使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。
Flask的基本模式为在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值并将其显示到浏览器上,其工作过程见图。
app.py: 项⽬管理⽂件,通过它管理项⽬。
static: 存放静态文件
templates文件夹:用于放置html模板文件
开始
我用的是pycharm社区版,要自己配置。。
如下:
创建完成后程序为:
这个程序就是函数的主体框架了,下面通过好多小例子加深理解。
from flask import Flask #引入flask
app = Flask(__name__)
#路由解析,通过用户访问的路径匹配相应的函数
@app.route('/')#这里的意思是用什么网页后缀进行访问,要是/text就在网页后缀加/text才能进行访问
def index():
return '<h1>Hello World</h1>'
if __name__ == '__main__':
app.run(debug=True) #这里debug=True将调试模式打开,即可以实时修改网页的数据
运行截图:
通过访问路径获取用户的字符串参数
eg:
@app.route('/user/<name>')
这样为向网页发送输入,即
输入的xx为提供的name值,然后我们还可以将函数改下,
def welcome(name):
return "%s"%name
这样就可将输入的通过函数的方式进行处理加工。同样我们也可以添加多个变量来传入。
通过访问路径获取用户的数字参数
@app.route('/user/<int:name>')#路由
def welcome(name):
return "%d"%name
用int:来强制转换,再输出时用%d即可。
用float:来强制转换,再输出时用%lf即可。
(这里会自动匹配多个函数下的用户某个正确输入,从而进入不同的函数)
路由不能重复,用户通过唯一路径访问特定的函数,函数名也不能重复!!
render_template库
这个是flask里渲染用的模块,在templates文件夹下新建index.html并添加ht5的格式(我是社区版所以要自己动手丰衣足食)即:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>hello world</h1>
</body>
</html>
我们在定义一个路由为:
@app.route("/")
def index2():
return render_template("index.html"
运行后在网页显示为:
即做网页只需要两步,第一步定义路径,第二步做html发给用户
很关键一点是两个路由不能用同一个html不然后一个为404
向页面传递变量
eg:
#返回渲染后的页面
#向页面传递一个变量
@app.route("/")
def index2():
name = ["aa","aad"]
return render_template("index.html",list=name)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>hello world MCL,{{ var }}</h1><br/>
this is {%for data in list %}
<li> {{data}}</li>
{% endfor %}
</body>
</html>
这里直接向其中传入list,在html中编写页面,
{{ 变量 }}为显示向其中传入的变量;
" < b r > "为换行符;
用 {%for data in list %}
{{data }}
{% endfor %} <!控制结构!>
遍历list;
用<! !>进行注释
截图:
下面传一个字典让我们康康该怎么做, 同时康康怎么写一个表格
from flask import Flask,render_template
import datetime
app = Flask(__name__)
#返回渲染后的页面
#向页面传递一个变量
@app.route("/")
def index2():
#变量
time = datetime.date.today()
#列表类型
name = ["Ross","Jack"]
#字典类型
task = {"mission":"GOOD JOB","WAY":"GET TOP"}
return render_template("index.html",time=time,list=name,task=task) #前面是页面里用的,后面是我们传的参数,所以传成一样就很方便
if __name__ == '__main__':
app.run(debug=True)
html里为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>今天是{{ time }}</h1><br/>
这里是
{%for data in list %}
<li> {{data}}</li>
{% endfor %}
今天任务:<br/> <!如何打印表格!>
<table border="1"> <!表格样式!>
{% for key,value in task.items() %} <!用python里的键值对的方式即可,可以看出python的支持有多强大!>
<tr>
<td> {{key}}</td>
<td> {{value}}</td>
</tr>
{%endfor%}
</table>
</body>
</html>
结果:
表单的提交与收集
rom flask import Flask,render_template,request
app = Flask(__name__)
#表单提交
@app.route("/text/register") #这里的text/为网页里的格式
def register(): #这里要加/text才能找到网页
return render_template("text/register.html") #这里的text/为文件夹路径
##结果收集
@app.route("/result",methods =[ 'POST','POST']) #不写methods则访问方式为GET,很有可能METHOD NOT ALLOWED #这里不需要加/text因为前一步已经找到
def result():
if request.method == 'POST':
result = request.form #注意这里需要引入request并用form字典的方式引入
return render_template("text/result.html",result=result)
if __name__ == '__main__':
app.run(debug=True)
这里定义文件存储为:
其中register为收集页面,result为返回结果页面,如下:
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action ="{{url_for('result'}}" method="post" >#url_for为动态生成网页,这里网页可用http://localhost:5000/result
<p>姓名: <input type = "text" name = "姓名"</p>
<p>年龄: <input type = "text" name = "年龄"</p>
<p>性别: <input type = "text" name = "性别"</p>
<p>地址: <input type = "text" name = "地址"</p>
<p><input type = "submit" value="提交"></p>
</body>
</html>
result.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="5">
{% for key,value in result.items() %}
<tr>
<td> {{key}}</td>
<td> {{value}}</td>
</tr>
{%endfor%}
</table>
</body>
</html>
结果:
结语
这些好多是前端的内容了,对我这个大一的蒟蒻确实有些头大,但我接下来会尽量把这次的项目做完的。