4- 视图

一. Response响应相关:

视图函数的几种返回方法:
        str    : 字符串
        dict  : json

        Response():  response对象
        make_response()   : response对象
        redirect()  :  重定向
        render_template()  :  模板渲染

from flask import Flask, Response, make_response

import settings

app = Flask(__name__)
app.config.from_object(settings)  # 加载配置文件



# return 后面的字符串其实也是做了一个response对象的封装,最终的返回结果还是response对象

@app.route('/index')
def index():
    return {"data": "。。。"}  # 返回格式:Content-Type: application/json


@app.route("/index1")
def index1():
    return "嘿嘿"  # 返回格式 Content-Type: text/html; charset=utf-8


@app.route("/index2")
def index2():
    return "hello word", 201  # 元祖,第一个参数:内容,第二个参数:状态码


@app.route("/index3")
def index3():
    response = Response("lll")  # 返回的response对象
    print(response.content_type)  # 获取返回格式Content-Type
    print(response.headers)
    print(response.status_code)  # 200
    print(response.status)  # 200 ok
    response.set_cookie("name", "coco")  # 设置返回cookie
    return response


@app.route("/index4")
def index4():
    content = """
    
    
    
        
        Title
    
    
    

欢迎

""" response = make_response(content) # 返回值就是一个response对象 # 自定义响应头 response.headers["mytest"] = "123abc" response.headers["myhello"] = "hello" # 将定制好的response返回 return response if __name__ == '__main__': app.run(port=8080)

二. Request请求相关:

app.py

from flask import Flask, request, render_template

import settings

app = Flask(__name__)
app.config.from_object(settings)  # 加载配置文件


# 1. request请求数据
@app.route('/index')
def index():
    print(request.headers)  # request对象,对象访问属性,也可以调用方法
    print(request.path) # /index
    print(request.full_path) # /index?username=%22xxx%22&age=18
    print(request.base_url) # 主路径 http://127.0.0.1:8080/index
    print(request.url) # 完整路径 http://127.0.0.1:8080/index?username="xxx"&age=18

    return "hello world"


# 2. app.py与模板的结合使用
@app.route('/index1')
def index1():
    # 默认去模板文件夹中找文件,怎么就知道模板文件是templates?Flask对象的ini方法指定了
    r = render_template("index.html")
    # print(r)  # r:是html页面
    return r


# 3. 获取get / post参数
@app.route('/index2', methods=["GET", "POST"])
def index2():  # 获取页面提交的内容
    # print(request.full_path)  # /index2?username=231&addre=321
    # print(request.path)      # /index2
    # 获取get参数
    print(request.args)  # dict类型,args只能接收到路径传参的(get请求)
    # print(request.args.get("username"))  # 获取表单上的数据,表单提交必须写name属性
    # print(request.args.get("addr"))

    # 获取post参数
    print(request.form)  # 如果请求方式是post,需要通过request.from来取值
    print(request.form.get("username"))
    print(request.form.get("addr"))
    return "ok"

if __name__ == '__main__':
    app.run(port=8080)

templates / index.html




    
    Title


用户名: 地址:

settings.py

ENV = "development"  # 开发环境
DEBUG = True         # 开启调试模式

三.案例:注册

app.py

import json

from flask import Flask, request, render_template

import settings

app = Flask(__name__)
app.config.from_object(settings)  # 加载配置文件



users = []
@app.route('/logon', methods=["GET", "POST"])
def logon():
    # print(request.method)
    # post请求处理数据
    if request.method == "POST":
        username = request.form.get("username")
        password = request.form.get("password")
        password1 = request.form.get("password1")
        # 用户密码的一致性验证
        if password == password1:
            user = {"username": username, "password": password}
            users.append(user)
            return "注册成功"
        else:
            return "两次密码不一致"

    # get请求访问页面
    return render_template("logon.html")  # 注册页面


@app.route("/show")
def show():  # 查看列表中的数据
    # users[]-->str  json字符串
    j_str = json.dumps(users)
    return j_str

if __name__ == '__main__':
    app.run(port=8080)

templates / logon.html




    
    Title


{#如果表单提交需要在表单元素上加上name属性#}

用户注册

settings.py

ENV = "development"  # 开发环境
DEBUG = True         # 开启调试模式

运行

python app.py

浏览器访问

http://127.0.0.1:8080/logon
http://127.0.0.1:8080/show

你可能感兴趣的:(Flask,flask)