Django学习笔记【路由、请求、响应】

122 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情 本文已参与「新人创作礼」活动,一 起开启掘金创作之路。

路由

URL

  • 表示互联网上资源的地址

utls.py

  • 访问服务时依次匹配urlpatterns中的所有路由,返回匹配到的路由
  • path('admin/', admin.site.urls)第一个参数是路由名,第二个是视图函数

视图函数

  • 视图函数类似与springboot中的注解一样(就是那个写在方法头上面的@)

  • 用于接收浏览器HttpRequest请求,并通过HttpResponse对象返回响应的函数

  • 语法:

    def xxx_view(request[其他参数...]):
       return HttpResponse对象
    
  • 样例

    from django.http import HttpResponse
    
    def test1(request):
      html = '<h1>hello world</h>'
      return HttpResponse(html)
    

    然后在urls.py中添加路由path('test1/', views.test1)


路由配置

path()

  • 导入 - from django.urls import path
  • 语法 - path(route,views,name=None)
  • 参数:
    • route:字符串类型,匹配的请求路径
    • views:指定的路径所对应的视图处理函数的名称
    • name:为地址起别名,在模板中地址反向解析时使用

path转换器

  • 将路由中的参数传递到视图函数
  • 语法:
    • 主路由中:path('test2/<int:pg>', views.test2)
    • 视图函数:
      def test2(request, pg):
         html = '<h1>%s</h>'%(pg)
         return HttpResponse(html)
      
    以上例是增加test2/<int:pg>的路由,例如test2/1test2/2等等
  • 注:匹配路由是是从上往下匹配,匹配到就结束匹配

re_path()

  • 在url匹配时用正则表达式进行精确匹配
  • 语法:
    • re_path(reg, view, name=xxx)
    • (?P<name>pattern),提取参数后传入视图函数
  • 样例:
    • 可匹配:localhost:8080/20/mul/40
    • 不可匹配:localhost:8080/200/mul/400
    • 添加路由:re_path(r'^test3/(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$', views.test3)
    • 视图函数:
      def test3(request, x, op, y):
        html = '<h1>%s%s%s</h>'%(x, op , y)
        return HttpResponse(html)
      

请求和响应

请求方法

  • http1.0:get, post, head
  • http1.1:put, options, delete, trace, connect

request

  • path_info:URL字符串
  • method:字符串,表示HTTP请求方法
  • GET:QueryDict查询字典对象
  • POST:QueryDict查询字典的对象,包含post请求方式的所有数据
  • FILES:类似于字典的对象,包含所有上传文件的信息
  • COOKIES:python字典,包含所有cookie,键和值都时字符串
  • session:类似字典的对象,表示当前的会话
  • body:字符串,请求体内容
  • scheme:请求协议('http'/'https')
  • get_full_path():请求的完整数据
  • META:请求头的元数据

GET处理

  • 示例:
    • request.GET['参数名']
    • request.GET.get('参数名','默认值'),没有参数时,返回默认值
    • request.GET.getlist('参数名')

POST处理

  • 示例:
    • request.POST['参数名']
    • request.POST.get('参数名','默认值'),没有参数时,返回默认值
    • request.POST.getlist('参数名')