测开必备—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

4
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()


这里,在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字符串

uuid释义 :uuid是国际通行的唯一标识码,它是纯数字的,它保证在同一时空中,任何一次生成的uuid码都是唯一的,开放软件基金会对它进行了定义,它包含有时间,时间、以太网地址、CPU的id等各种数字。


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进行处理。


5
反向路由url_for()

反向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显示在了页面上:

测开必备—Flask网站制作

实际应用场景:把页面跳转至某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() # 让这个这个应用跑起来

运行结果:

测开必备—Flask网站制作

注意:视图函数里的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方法就会捕捉到你使用的方法,然后在页面上显示出来

测开必备—Flask网站制作 

6. 当进入页面时,显示的是GET方法,说明视图函数捕捉到的方法就是GET,既然已经指定了POST,为什么还是GET呢?因为进入页面这个操作默认就是GET方法,而我们指定的POST方法是指提交的一瞬间所使用的方法,不是进入页面的方法

7. 点击提交按钮后,页面会显示POST方法

测开必备—Flask网站制作

那是因为我们在aaa.html页面的表单里定义了参数传递的方法是POST,所以在点击按钮后,页面就会以POST方式进行提交,被request.method捕捉后显示在页面上

一定要实战!(未完待续)

下期预告:模板


以上是关于测开必备—Flask网站制作的主要内容,如果未能解决你的问题,请参考以下文章

测开之路一百二十七:flask之构造response对象

测开之路一百二十六:flask之获取request请求数据

沿用Python+Flask+Mysql的web建设技术开发网站

测开之路一百二十八:flask之重定向和404

测开之路一百二十五:flask之urlencode参数传递和解析

[测开学习]--HTML