ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Flask基础(三)

2022-02-06 11:00:09  阅读:166  来源: 互联网

标签:__ return name Flask 基础 app request response


request

服务器在接收到客户端请求后,会自动创建Request对象,由Flask自动创建,Request对象不可修改。

from flask import Flask
from flask import request


app = Flask(__name__)

'''
获取当前请求的内容
1 先要导入request
2 直接用request.方法,属性
'''

@app.route('/login.html', methods=['GET', "POST"])
def login():

    # 请求相关信息
    # request.method  提交的方法
    print("request.method",request.method)
    # request.args  get请求提及的数据
    print("request.args", request.args)
    # request.form   post请求提交的数据
    # request.values  post和get提交的数据总和
    # request.cookies  客户端所带的cookie
    # request.headers  请求头
    # request.path     不带域名,请求路径
    # request.full_path  不带域名,带参数的请求路径
    # request.script_root
    # request.url           带域名带参数的请求路径
    # request.base_url		带域名请求路径
    # request.url_root      域名
    # request.host_url		域名
    # request.host			127.0.0.1:500
    # request.files
    # obj = request.files['the_file_name']
    # obj.save('/var/www/uploads/' + secure_filename(f.filename))
	return "字符串"
  

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

response

from flask import Flask
from flask import render_template, redirect, make_response, jsonify

app = Flask(__name__)


@app.route('/login.html', methods=['GET', "POST"])
def login():
 	# 响应相关信息
    # return "字符串"                               # 字符串
    # return render_template('html模板路径',**{})   # 渲染模板
    # return redirect('/index.html')               # 重定向
    #return jsonify({'k1':'v1'})                   # 返回json数据

    
    """
    返回的时候,如果需要设置额外的响应参数,比如cookie,heard
    1 response=make_response(四剑客)
    2 response.设置属性=“属性值”
    3 return response
    """
    # response = make_response(render_template('index.html'))
    # response是flask.wrappers.Response类型
    # response.delete_cookie('key')                # 删除cookies
    # response.set_cookie('key', 'value')          # 设置cookies
    # response.headers['X-Something'] = 'A value'  # 设置请求头
    # return response
    response1=make_response(render_template('rr.html'))
    #response1.set_cookie('key_sss', 'valuessbbsd')
    # response1.delete_cookie('key_sss')
    response1.headers['sb'] = 'asdas'
    return response1

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


---------------------------------------------------------------------------------------

request 使用实例
# coding:utf-8
from flask import Flask, request
app = Flask(__name__)

# 接口  api
# 127.0.0.1:5000/index?city=chongqing&country=china  
@app.route("/index", methods=["GET", "POST"])
def index():
    # request中包含了前端发送过来的所有请求数据
    # form和data是用来提取请求体数据
    #当前端通过存表单提交的时候content-type:urlencode的时候,所有数据已经被flask封装到了form里面。
    #如果时候form-data多类型数据,可以通过request.data获取
    # 通过requset.form可以直接提取请求体中的表单格式的数据, 是一个类字典的对象
    # 通过get方法只能拿到多个同名参数的第一个
    name = request.form.get("name")
    age = request.form.get("age")
    name_li = request.form.getlist("name")

    # 如果是请求体的数据不是表单格式的(如json格式),可以通过request.data获取
    print("request.data: %s" % request.data)

    # args是用来提取url中的参数(查询字符串)
    city = request.args.get("city")
    return "hello name=%s, age=%s, city=%s, name_li=%s" % (name, age, city, name_li)   

@app.route("/upload", methods=["POST"])
def upload():
    """接受前端传送过来的文件"""
  #如果是文件类型的,可以通过 request.files获取文件
    file_obj = request.files.get("pic")
    if file_obj is None:
        # 表示没有发送文件
        return "未上传文件"

#方式一(常规)
    # 将文件保存到本地
    # # 1. 创建一个文件
    # f = open("./demo.png", "wb")
    # # 2. 向文件写内容
    # data = file_obj.read()
    # f.write(data)
    # # 3. 关闭文件
    # f.close()
    
#方式二(推荐)
    # 直接使用上传的文件对象保存
    file_obj.save("./demo1.png")
    return "上传成功"

# with open打开文件自动可以关闭流
with open("./1.txt", "wb") as f:
    f.write("hello flask")

@app.route("/login", methods=["GET"])
def login():
    # name = request.form.get()
    # pwd = request.form.get()
    name = ""
    pwd = ""
    if name != "11111" or pwd != "admin":
        # 使用abort函数可以立即终止视图函数的执行
        # 并可以返回给前端特定的信息
        # 1 传递状态码信息, 必须是标准的http状态码
        abort(404)
        # #2. 传递响应体信息
        # resp = Response("login failed")
        # abort(resp)

    return "login success"


# 定义错误处理的方法
@app.errorhandler(404)
def handle_404_error(err):
    """自定义的处理错误方法"""
    # 这个函数的返回值会是前端用户看到的最终结果
    return u"出现了404错误, 错误信息:%s" % err


if __name__ == '__main__':
    app.run(debug=True)

-------------------------------------------------------------------------------
response实例
# coding:utf-8

from flask import Flask, request, abort, Response, make_response
app = Flask(__name__)

#比较常规的处理response方式
@app.route("/index")
def index():
    # 1 使用元祖,返回自定义的响应信息
    #              响应体       状态码 响应头
    # return "index page", 400, [("aimaile", "1"), ("City", "c1")]
    # return "index page", 400, {"aimaile": "2", "City1": "cq"}
    # return "index page", 666, {"aimaile": "3", "City1": "cq"}
    # return "index page", "666 aimaile status", {"aimaile": "python1", "City1": "cq"}
    # return "index page", "666 aimaile status"

    # 2 使用make_response 来构造响应信息
    resp = make_response("index page 2")
    resp.status = "999 itcast"  # 设置状态码
    resp.headers["city"] = "cq " # 设置响应头
    return resp
 
# 目前我用得最多的是返回json。
#1、终端和平台交互现在一般都是json。
#2、目前很流行前后分离,前端用vue,前后交互也用json,后台只管数据处理,前端只管渲染数据
@app.route("/list")
def loveCity():
    # json就是字符串
    data = {
        "city": "cq",
        "old": 11
    }
    # json.dumps(字典)  将python的字典转换为json字符串
    #  json.loads(字符串)  将字符串转换为python中的字典
    
    # json_str = json.dumps(data)
    # return json_str, 200, {"Content-Type": "application/json"}

    # jsonify帮助转为json数据,并设置响应头 Content-Type 为application/json
    # return jsonify(data)

    return jsonify(city="cq", country="china")

if __name__ == '__main__':
    app.run(debug=True)
 

标签:__,return,name,Flask,基础,app,request,response
来源: https://www.cnblogs.com/oceaning/p/15865375.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有