翼度科技»论坛 编程开发 python 查看内容

Python-Web框架flask使用示例教程

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
1.Web框架


1.1 flask

python的web框架,目录结构如下:

1.static存放的是css,js的样式文件
2.templates存放的是html文件
3.app.py是主要接口入口,默认创建就有如下代码:
  1. from flask import Flask
  2. app = Flask(__name__)    #这是两条短线
  3. # 路由解析,通过用户访问的路径,匹配相应的函数
  4. @app.route('/')
  5. def hello_world():
  6.    return 'hello world'
  7. if __name__ =='__main__':
  8.    # 启动Flask框架
  9.    # debug=True 开启debug模式,在调式阶段开启debug不止更改东西不用重启,还可以出现错误,界面直接给你展现错误原因
  10.    app.run()
复制代码
右键启动以后,则控制台有以下信息

点击蓝色链接以后则浏览器打开访问web,其实就是flask框架在启动监听,默认给的端口是5000


1.1.1 debug调试

在没有上线阶段,最好用debug模式,默认debug模式是关闭的,如控制台会写Debug modeff,开启debug则需要在代码app.run里写debug=True,我这里如下图片为on,表示启动成功了,有的环境会debug不成功,是不同环境的原因,可以采用其他方式更改。

debug还有一个好处就是后台业务出现问题,可以在前台页面展示
比如我更改如下代码,输出name,但是name变量没有定义:

刷新界面:它会告诉你什么错误,也会告知错误在哪里,所以初学者一定在调试时使用debug模式,能更方便定义问题。

debug还可以不重新启动更改业务直接界面刷新就会不一样,在代码更改nihao,如
  1. # 路由解析,通过用户访问的路径,匹配相应的函数
  2. @app.route('/')
  3. def hello_world():
  4.         return 'nihao'
复制代码

自己定义一个web服务:
  1. @app.route('/test')
  2. def mappingTest():
  3.    return 'test app'
复制代码
访问这个web服务,test


1.1.2 定义参数web服务 获取字符串

1.获取字符串,通过<> 后台能够获取内容,多个则/paramTest//,paramTest(name,age)
  1. # 通过访问路径,获取用户的字符串参数
  2. @app.route('/paramTest/<name>')
  3. def paramTest(name):
  4.    return 'test app,%s'%name
复制代码
访问结果

需要定义<int:paramname>则代表接收int型数据,还可folat类型,则<folat:参数>
  1. @app.route('/intTest/<int:id>')
  2. def intTest(id):
  3.    return 'test app,%d'%id
复制代码
结果:


1.1.3 html网页渲染

咱们返回直接返回内容了,如果直接返回网页呢,需要导入包为render_template,通过render_template("index.html")直接返回html网页内容,前提是需要创建html
  1. from flask import Flask, render_template
  2. # 访问网页
  3. @app.route('/')
  4. def index():
  5.    return render_template("index.html")
复制代码
在templates目录下创建一个index.html,自动就有这些结构,在body下加你好啊几个字
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Title</title>
  6. </head>
  7. <body>
  8.    你好啊
  9. </body>
  10. </html>
复制代码
网页刷新


1.13.1 带参数传给网页文件 普通元素

1.普通元素,通过定义var把time 传给html文件里
  1. import datetime
  2. #向页面传递一个变量,html接收以{{定义的变量名来使用}}
  3. @app.route('/')
  4. def index():
  5.    time=datetime.date.today() #普通变量
  6.    return render_template("index.html",var=time)
复制代码
在html里使用则需要{{变量名}}接收
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Title</title>
  6. </head>
  7. <body>
  8.    时间是:{{var}},你好啊
  9. </body>
  10. </html>
复制代码
界面展示:

列表元素
2.列表元素,当然这个list可以随便起名字,只要html对的上
  1. @app.route('/')
  2. def index():
  3.     time = datetime.date.today()  # 普通元素
  4.     names = ["哈哈", "喜喜", "dudu"]  # 列表元素
  5.     return render_template("index.html", var=time, list=names)
复制代码
html里循环list这样使用:{% %}代表循环的开始,{%endfor%}代表循环结束,这个语法是jinga2方式
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Title</title>
  6. </head>
  7. <body>
  8.    时间是:{{var}},你好啊<br>
  9.    跟您匹配的朋友有:<br>
  10.    {% for data in list %}
  11.        {{data}}
  12.    {% endfor %}
  13. </body>
  14. </html>
复制代码
结果:

字典元素
定义task字典元素,看看html怎么操作
  1. @app.route('/')
  2. def index():
  3.     time = datetime.date.today()  # 普通元素
  4.     names = ["哈哈", "喜喜", "dudu"]  # 列表元素
  5.     # html里循环names这样使用,{% %}代表循环的开始,{%endfor%}代表循环结束
  6.     task={"task":"学习","time":"2小时"} # 字典元素
  7.     return render_template("index.html", var=time, list=names,task=task)
复制代码
这里用了table添加了两行表格,表示行,表示列,第一行则是key键名称所以循环得到key,第二行则为值,取到value
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Title</title>
  6. </head>
  7. <body>
  8.    时间是:{{var}},你好啊<br>
  9.    跟您匹配的朋友有:<br>
  10.    {% for data in list %}
  11.       <li> {{data}}</li>
  12.    {% endfor %}
  13.    任务:<br>
  14.    <table border="1">
  15.        <tr>
  16.            {% for key,value in task.items() %}
  17.               <td>{{key}}</td>
  18.            {% endfor %}
  19.        </tr>
  20.         <tr>
  21.            {% for key,value in task.items() %}
  22.               <td>{{value}}</td>
  23.            {% endfor %}
  24.        </tr>
  25.    </table>
  26. </body>
  27. </html>
复制代码
运行结果


1.13.2 input表单提交

我们添加一个inputform接口,并返回一个register的html网页,这个表单网页数据数据并提交就调用result接口,result接口里接收到页面的表单信息并返回。
  1. from flask import Flask, render_template,request
  2. # 访问此接口返回表单页面
  3. @app.route('/inputform')
  4. def inputform():
  5.     return render_template("register.html")
  6. # input表单界面提交时进入的方法,方法方式为post
  7. @app.route('/result',methods=['post'])
  8. def result():
  9.     # 通过request获取用户表单数据,request.form返回的是字典信息
  10.     if request.method=='POST':
  11.         result = request.form
  12.     return result
复制代码
register.html网页内容
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Title</title>
  6. </head>
  7. <body>
  8. <!-- action里最好不要写死地址,可以采用url_for使用,自动帮你找到后台方法,注意路由名和方法名一致,防止找不到 -->
  9. <form action="{{ url_for('result') }}" method="post">
  10.     <p>姓名:<input type="text" name="name"></p>
  11.     <p>性别:<input type="text" name="gender"></p>
  12.     <p>年龄:<input type="text" name="age"></p>
  13.     <p>地址:<input type="text" name="address"></p>
  14.     <p><input type="submit"></p>
  15. </form>
  16. </body>
  17. </html>
复制代码
启动并访问如下界面内容:

输入完数据点击提交,就会进入后台的result接口,后台接口就会拿到表单数据,

到此这篇关于Python-Web框架flask使用的文章就介绍到这了,更多相关Python-Web框架flask内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/python/2921729mv.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具