测试开发——搭建一个简单 web服务(flask框架基础)项目实战

一、什么是wsgi?

wsgi是webserver和application的传话筒,起桥梁通信的作用。
在这里插入图片描述

二、搭建一个简单 web服务

# coding:utf-8

# 步骤:
# 搭建服务
# 监听动作 while循环,每隔几秒钟要去看看有没有请求发过来
# 处理程序
# 返回数据到套接字,生成一个响应对象
from wsgiref.simple_server import make_server


def app(env, make_reponse):
    # env 获取相关数据——环境变量
    # make_reponse(状态码:header)
    make_reponse("200 ok", [('content-type', 'text/plain')])
    return [b"hello,hanhanwang"]  # b为byte类型


server = make_server("", 8000, app)
server.serve_forever()

运行情况:(下同!)
在这里插入图片描述

三、扩展

  1. 定义3个url,’/'首页 ,‘register’注册, '/login’登录
  2. 对3个url 做对应的响应
  3. 异常处理:如果访问不在指定的3个rul,报404错误。
# coding:utf-8

# 步骤:
# 搭建服务
# 监听动作 while循环,每隔几秒钟要去看看有没有请求发过来
# 处理程序
# 返回数据到套接字,生成一个响应对象
from wsgiref.simple_server import make_server


def index():
    return "hello,I'm index!"

def register():
    return "hello,please register!"

def login():
    return "hello,please login!"

def app(env, start_resp):
    # env 获取相关数据——环境变量
    # start_resp(状态码:header)

    if env.get("PATH_INFO") == "/":
        start_resp("200 ok", [('content-type', 'text/plain')])
        soresponse = index()
        return [soresponse.encode()]

    elif env.get("PATH_INFO") == "/register":
        start_resp("200 ok", [('content-type', 'text/plain')])
        soresponse = register()
        return [soresponse.encode()]

    elif env.get("PATH_INFO") == "/login":
        start_resp("200 ok", [('content-type', 'text/plain')])
        soresponse = login()
        return [soresponse.encode()]

    else:
        start_resp("404 not found", [('content-type', 'text/plain')])
        return [b"sorry!page not found!"]  # b为byte类型


server = make_server("", 8001, app)
server.serve_forever()

如果出现很多的条件分支都是==,那就用字典去封装。(这样的优势:更灵活,修改添加起来很方便)

代码简化:

# coding:utf-8

# 步骤:
# 搭建服务
# 监听动作 while循环,每隔几秒钟要去看看有没有请求发过来
# 处理程序
# 返回数据到套接字,生成一个响应对象
from wsgiref.simple_server import make_server


def index():
    return "hello,I'm index!"


def register():
    return "hello,please register!"


def login():
    return "hello,please login!"


# 这是一段路由 集中管理(有点像Django框架)
patterns = {
    
    
    "/": index,
    "/register": register,
    "/login": login,
}


def app(env, start_resp):
    # env 获取相关数据——环境变量
    # start_resp(状态码:header)

    url = env.get("PATH_INFO")
    if (url is None) or (url not in patterns.keys()):
        start_resp("404 not found", [('content-type', 'text/plain')])
        return [b"sorry!page not found!"]  # b为byte类型

    start_resp("200 ok", [('content-type', 'text/plain')])
    respon = patterns.get(url)
    if respon is None:
        start_resp("404 not found", [('content-type', 'text/plain')])
        return [b"sorry!page not found!"]  # b为byte类型

    return [respon().encode()]


server = make_server("", 8001, app)
server.serve_forever()

https://blog.csdn.net/hanhanwanghaha欢迎关注这个超级无敌可爱的人鸭,有什么问题留言私信皆可,看见必回!
创作不易,如有转载,请注明出处

四、请求加参数的情况

# coding:utf-8

# 步骤:
# 搭建服务
# 监听动作 while循环,每隔几秒钟要去看看有没有请求发过来
# 处理程序
# 返回数据到套接字,生成一个响应对象
import json
from wsgiref.simple_server import make_server


def index(request):
    return request


def register(request):
    return request


def login(request):
    return request


# 这是一段路由 集中管理(有点像Django框架)
patterns = {
    
    
    "/": index,
    "/register": register,
    "/login": login,
}


def app(env, start_resp):
    # app : flask核心对象
    # env 获取相关数据——环境变量
    # start_resp(状态码:header)

    url = env.get("PATH_INFO")
    params = env.get("QUERY_STRING")
    if (url is None) or (url not in patterns.keys()):
        # start_resp("404 not found", [('content-type', 'text/plain')])
        # return [b"sorry!page not found!"]  # b为byte类型

        # start_resp("404 not found", [('content-type', 'text/html')]) #如果想返回html,就直接改成('content-type', 'text/html')
        # return [b"<p style='color:green'>sorry!page not found!</p>"]  # b为byte类型

        start_resp("404 not found", [('content-type', 'application/json')])
        result = json.dumps({
    
    "msg": "page is not found"})
        return [result.encode()]

    start_resp("200 ok", [('content-type', 'text/plain')])
    respon = patterns.get(url)
    if respon is None:
        start_resp("404 not found", [('content-type', 'text/plain')])
        return [b"sorry!page not found!"]  # b为byte类型

    return [respon(params).encode()]


server = make_server("", 8002, app)
server.serve_forever()

都说用了django(相比flask来说更具效率),都不会喜欢flask了,但老师说,我们学习flask就是为了采坑及对web框架有更深入的认识,当我们在django中遇到问题,处理起来也会比较容易一点。

五、安装flask

pip install flask

如图:
在这里插入图片描述

接下来就会详细记录flask框架实战重点,后面继续更博!
我还是个flask小白,如果大佬看到,希望可以提上您宝贵的建议,感激不尽!

https://blog.csdn.net/hanhanwanghaha欢迎关注这个超级无敌可爱的人鸭,有什么问题留言私信皆可,看见必回!
创作不易,如有转载,请注明出处

猜你喜欢

转载自blog.csdn.net/hanhanwanghaha/article/details/113740244
今日推荐