骄傲的赛亚人

day4django请求和响应、视图

django中的请求和响应

django框架是一个web应用框架,本质上就是处理用户发起的请求,然后返回响应结果,请求、和响应就是框架中的数据流

当一个请求来时,django会把它创建成一个HttpRequest对象,该对象包含了请求的元数据。然后django加载适当的视图,将HttpRequest对象作为一个参数传递给视图函数。每个视图函数负责返回一个HttpResponse对象

 

 

常用属性(HttpReques=request)

HttpRequest.body

原始请求的body,格式是字节类型

HttpRequest.method

代表当前请求中使用的http方法的字符串,保证是大写字母

HttpRequest.POST

  • 接受表单提交的数据
  • 表单数据可以直接通过POST属性获取
  • 一个类字典对象,包含所有给定的表单格式的POST请求参数

HttpRequest.GET

一个类字典对象,包含给定http的url参数,查询参数,?key=value

HttpRequest.FILES

一个类字典,包含所有的上传文件

HttpRequest.headers

请求头信息

 

请求参数类型

1、查询字符串参数

url中,?后面以key=value形式的参数

django中使用,request.GET获取

2、请求体参数

  • form表单

    django中使用,request.POST获取,注意POST属性只有post请求并且是form表单格式才能获取

    对于post以外的请求,form表单也是通过request.body属性获取

  • json

    django使用,request.body属性获取

  • 文件

    django中使用,request.files属性获取

3、路径参数

url路径中

  django中通过路由规则传递给视图参数

 

响应

用法

传入字符串

from django.http import HttpResponse

response1 = HttpResponse("我是一个字符串")

response1 = HttpResponse(“Text”,content_type="text/plain")

response2 = HttpResponse(b"Texr")

增量方式

response = HttpResponse()

response.write("<p>我是一个响应对象</p>")

response.write("<p>我是第二行</p>")

设置响应头字段

1、在实例化的时候以参数的形式传入

2、在对象的headers属性里设置

  response = HttpResponse("我是一个字符串")

  response.headers["content_type"] = "text/plain"

 

django内置的响应类型

 

django包含了许多HttpResponse的字类用来处理不同的响应类型

JsonResponse对象

from django.http import JsonResponse

一个HttpResponse的字类,创建一个json编码的响。默认的Content-type设置为application/json

JsonResponse(data, encoder=DjangoJSONEncoder, safe=True)

第一个参数默认data只能是字典,如果不是字段需要参数safe = False

注意:data里面包含的数据,只能是字符串、数值、datetime、Decimal、True、False、None它们组成的字典或者列表

 

常用的用法:

response = JsonResponse({"foo":"bar"})

序列化非字典对象

response = JsonResponse([1,2,3],safe = False)

 


 

视图

django中视图本质上就是函数,接受用户传入的请求,返回对应的响应

在视图中处理业务逻辑,django约定将视图放在view.py的文件中,这个文件应放在项目或者应用目录中

函数视图

def some_view(self):
    dosometing
    return HttpResponse(html)

特点:

  逻辑清晰好理解

  复用性较差

函数视图的路由

urlpatterns = [
    path("create/", views.create_project) # create_project就是函数
]

 


 

类视图

基于类的视图,换了一种写法

优势:

  • 用特定的方法去管理http方法(get,post)
  • 使用面向对象的技术,可以将代码分解成可重用的组件

使用类视图

所有的类视图都要继承django.views.View

定义get方法,对应http协议中的get请求

class ProjectView(View):

    def get(self, request):
        return render(request, "projects/create.html")

    def post(self,request):
        name = request.POST.get("name")
        files = request.FILES.get("aaa")
        file_name = r"E:\CK10" + "\\" + files.name
        with open(file_name, "wb") as f:
            for line in files:
                f.write(line)
        return HttpResponse("项目:{}创建成功".format(name))

类视图的路由

urlpatterns = [
    path("create/", views.ProjectView.as_view())
  ]

注意:as_view()会返回一个函数, 不要忘记括号()

 

posted on 2022-06-10 10:32  骄傲的赛亚人  阅读(54)  评论(0编辑  收藏  举报

导航