测开必备—Flask网站制作
Posted 光荣之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测开必备—Flask网站制作相关的知识,希望对你有一定的参考价值。
新书
速递
吴老的java版《selenium webdriver 实战宝典》和python版《selenium Webdriver 3.0 自动化测试框架实战指南》出版了,代码拿来就能用。
文 | 远山近海
测开必备—Flask网站制作(1)
Hello,光荣之路推出新系列,Flask网站制作框架,教你快速实现网站制作,深入了解测试开发背后的逻辑和快速上手的工具。
Flask学习网站:
https://dormousehole.readthedocs.io/en/latest/(目录详细,但每一步的介绍内容较少)
https://blog.csdn.net/u014793102/article/details/80372815
https://yq.aliyun.com/articles/538176 页面元素及其验证
安装:pip install Flask
# coding=utf-8
from flask import Flask,url_for
app = Flask(__name__) # 创建了一个Flask类的实例__name__是自定义的名称,也可以用其他的,如__main__等
@app.route("/user/") # 用route()装饰器来自定义自己的URL
def user(): # 创建一个函数,返回一个值
return"hello user"
@app.route("/reverse_url/") # 用route()装饰器来自定义自己的URL
def reverse_url():# 创建一个函数,返回一个值
return"reverse url:"+url_for('user')
if __name__ == '__main__':
app.debug = True
app.run()
这里,在route装饰器的参数,即URL的后面加了<id>,这代表要在URL后面加一个叫做id的参数,这个参数要作为路由函数的参数,同时在返回值里体现。
另一种写法:
# coding=utf-8
from flask import Flask
app = Flask(__name__) # 创建了一个Flask类的实例__name__是自定义的名称,也可以用其他的,如__main__等
@app.route("/user/<id>") # 用route()装饰器来自定义自己的URL
def test(id): # 创建一个函数,返回一个值
return"hello user%d" % int(id)
if __name__ == '__main__':
app.debug = True
app.run()
这个写法的区别在于return语句,第二个例子的return语句是用%d完成的,这里注意,URL中的传参默认都是str类型的,如果你按第二种写法,也就是说,当你需要返回一个int类型的id时,必须把id转成int类型。
URL中加的变量可以有五种类型,说明如下:
各个参数类型及释义:
类型 |
释义 |
string |
此项为默认值,如果你不输入类型,默认就是它,它接受任何文本,除了/ |
int |
正整数 |
float |
浮点数 |
path |
类似于string,但可以包含/ |
uuid |
接受uuid字符串 |
URL中加变量的用处:
前台把一个变量通过GET方法传递给后台,GET方法会把变量直接写在URL里,如:
html文件里有如下语句:
<a href="{{url_for('delete',id=ir[0])}}">删除</a>
这是一个超链接,链接里各自都包含了id这个值
对应的路由函数如下:
@app.route("/delete/<id>")
def delete(id):
ins_person_showform =person_showform(request.form) # 把模型类实例化
OneResult_tuple= get_one_data(id)
return render_template("delete.html",OneResult_tuple=OneResult_tuple,form=ins_person_showform)
在视图函数里,id被作为参数传到了get_one_data这个函数里,得到的结果OneResult_tuple通过render_template传递给了delete.html页面,在那个页面里,会对OneResult_tuple进行处理。
反向URL是指取到某一个视图函数的URL
首先要导入url_for的包
例:直接获取URL
# coding=utf-8
from flask import Flask,url_for
app = Flask(__name__) # 创建了一个Flask类的实例__name__是自定义的名称,也可以用其他的,如__main__等
@app.route("/user/") # 用route()装饰器来自定义自己的URL
def user(): # 创建一个函数,返回一个值
return"hello user"
@app.route("/reverse_url/") # 用route()装饰器来自定义自己的URL
def reverse_url():# 创建一个函数,返回一个值
return"reverse url:"+url_for('user')
if __name__ == '__main__':
app.debug = True
app.run()
在这里,我们写了一个reverse_url函数,它把user函数的URL显示在了页面上:
实际应用场景:把页面跳转至某URL
此种用法最常用
在某html页面中,有如下语句:
@app.route("/edit/")
def edit(id):
return render_template("edit.html")
edit路由函数又对应了edit.html页面,也就是说,这句话的意思是通过点击修改链接跳转至edit.html页面。当然,如果直接写
<a href="edit.html">修改</a>
也行。
一个路由文件中多个视图函数
一个路由文件中可以有多个视图函数,在浏览器里写哪个视图函数的URL,就返回哪个视图函数的返回值
只要在函数上面加两个route装饰器即可
写一个简单的html页面
# coding=utf-8
from flask import Flask
app = Flask(__name__) # 创建了一个Flask类的实例__name__是自定义的名称,也可以用其他的,如__main__等
@app.route("/index/") # 用route()装饰器来自定义自己的URL
def my_first(): # 创建一个函数,返回一个值
user = {'username':'flask'} # 定义一个字典
html = '''<!这是一个字符串,内容是一个html页面>
<html>
<head>
<title>Home Page -Microblog</title>
</head>
<body>
<h1>Hello, ''' +user['username'] + '''!</h1><!把字典里的值和heml字符串拼接起来(这是html注释的写法)>
</body>
</html>
'''
returnhtml
if __name__ == '__main__':
app.debug = True
app.run() # 让这个这个应用跑起来
运行结果:
注意:视图函数里的html字符串可以放到另外一个文件里,以函数或类的形式存储,在路由文件里引用它,这样可以做到更好的代码分离。
获取表单发送请求的方式
常用的发送请求的方式无非就是两种,GET和POST,我们可以用flask的request.method方法来获取发送请求的方法
首先,先做一个login页面,如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h1>HTTP方法:{{thismethod}}</h1>
<form method="POST">
<div>
<input type="text">
</div>
<div>
<input type="password">
</div>
<div>
<input type="submit">
</div>
</form>
</body>
</html>
注意:HTTP方法:{{thismethod}}这句,此时定义的form里的请求方式是GET
路由文件:
# coding=utf-8
from flask import Flask
from flask import render_template,request
app = Flask(__name__) # 创建了一个Flask类的实例__name__是自定义的名称,也可以用其他的,如__main__等
@app.route("/",methods=["GET","POST"]) # 用route()装饰器来自定义自己的URL
def login(): # 创建一个函数,返回一个值
returnrender_template("aaa.html",thismethod=request.method)
if __name__ == '__main__':
app.debug = True
app.run() # 让这个这个应用跑起来
注意:
1. 页面里有一个form表单,定义了表单发送请求的方式是POST
2. 在视图函数里,通过request.method来获取表单提交时的方式,并把获取的结果赋给了thismethod变量
3. 在视图函数的装饰器里指定了接收和发送请求的方法是GET和POST
4. 视图函数通过render_template把thismethod传递给了aaa.html
5. 发送请求是指点击提交按钮的一瞬间所发送的请求所使用的方法,所以,当你在浏览器上点击提交按钮的时候,request.method方法就会捕捉到你使用的方法,然后在页面上显示出来
6. 当进入页面时,显示的是GET方法,说明视图函数捕捉到的方法就是GET,既然已经指定了POST,为什么还是GET呢?因为进入页面这个操作默认就是GET方法,而我们指定的POST方法是指提交的一瞬间所使用的方法,不是进入页面的方法
7. 点击提交按钮后,页面会显示POST方法
那是因为我们在aaa.html页面的表单里定义了参数传递的方法是POST,所以在点击按钮后,页面就会以POST方式进行提交,被request.method捕捉后显示在页面上
一定要实战!(未完待续)
下期预告:模板
以上是关于测开必备—Flask网站制作的主要内容,如果未能解决你的问题,请参考以下文章
沿用Python+Flask+Mysql的web建设技术开发网站