侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Django框架的使用教程路由请求响应的方法

框架(架构)  /  管理员 发布于 7年前   387

路由

路由可以定义在工程的目录下(看你的需求),也可以定义在各个应用中来保存应用的路由,用主路文件urls中使用include()包含各个应用的子路由的数据

路由的解析顺序

Django接收到请求后,从主路由文件urlpatterns中的路由从上倒下顺序查找,如果有include包含,则进入子应用的urls中的urlpatterns中查找(从上而下)

路由的结尾斜线

Django有/结尾路由,用户不需要加/,就可以直接重定向到/结尾的路径上

路由命名(可以避免不同应用使用相同名字发生冲突)

如:

# 主路由from django.conf.urls import url,includefrom django.contrib import adminimport django_test.urlsurlpatterns = [  url(r'^admin/', admin.site.urls),  url(r'^users/',include(django_test.urls ,namespace='users'))]

reverser反解析(子应用的路由都需要命名)

注意点:

  1. 对于未指明namespace的,reverse(路由name)
  2. 对于指明namespace的,reverse(命名空间namespace:路由name)

请求(POST,PUT,PATCH,DELETE)默认开启CSRF防护

post请求那些需要到postman测试工具里面测试

先把CSRF防护注释掉

向服务器传递参数的方式

URL:直接在URL中传递数据

查询字符串:key1=value1&key2=value2;

请求体:在body中传递数据,常见有表单,json,xml

请求头:在http报文头中

URL参数传递

未定义参数顺序传递

子应用的路由设置

urlpatterns = [  # 这边定义子应用的路由  url(r'^index/$',views.index,name='index'),  url(r'^show/$',views.show,name='show'),  url(r'^parameter/([a-z]+)/(\d{4})$',views.parameter,name='parameter'),]

定义视图函数

# name,和age参数位置调换会影响下面的输出结果def parameter(request,name, age):  print('age=%s'%age)  print('name=%s' % name)  return HttpResponse('OK')

命名参数按照名字传递

子路由

urlpatterns = [  # 这边定义子应用的路由  url(r'^index/$',views.index,name='index'),  url(r'^show/$',views.show,name='show'),  url(r'^parameter/(?P<name>[a-z]+)/(?P<age>\d{4})$',views.parameter,name='parameter'),]

视图函数

# age 和name位置改变值不变def parameter(request,age, name):  print('age=%s'%age)  print('name=%s' % name)  return HttpResponse('OK')

查询字符串(传递参数)

注意:查询字符串不区分请求方式,即假使客户端进行POST方式的请求,依然可以通过request.GET获取请求中的查询字符串数据。

子路由

url(r'^qust/$',views.qust),

视图函数

def qust(request):  a = request.GET.get('a')  b = request.GET.get('b')  alist = request.GET.getlist('a')  print(a) # 3  print(b) # 2  print(alist) # ['1', '3']  return HttpResponse('OK')

运行(后面在加)

请求体(传递参数)

表单类

路由设置

url(r'^get_form/$', views.get_form)

视图函数

def get_form(request):  name = request.POST.get('name')  age = request.POST.get('age')  alist = request.POST.getlist('name')  print(name)  print(age)  print(alist)  return HttpResponse('OK')

运行

非表单类

路由

url(r'^get_body_json/$', views.get_body_json),

视图

def get_body_json(request):  json_str = request.body  json_str = json_str.decode() # python3.6 无需执行此步  req_data = json.loads(json_str)  print(req_data['a'])  print(req_data['b'])  return HttpResponse('OK')

运行

请求头(传递参数)

可以通过request.META属性获取请求头headers的数据

路由

url(r'^get_head/$', views.get_head)

视图函数

def get_head(request):  print(request.META['CONTENT_TYPE'])  return HttpResponse('OK')

运行

常见的请求头

CONTENT_LENGTH C The length of the request body (as a string).

CONTENT_TYPE C The MIME type of the request body.

HTTP_ACCEPT C Acceptable content types for the response.

HTTP_ACCEPT_ENCODING C Acceptable encodings for the response.

HTTP_ACCEPT_LANGUAGE C Acceptable languages for the response.

HTTP_HOST C The HTTP Host header sent by the client.

HTTP_REFERER C The referring page, if any.

HTTP_USER_AGENT C The client's user-agent string.

QUERY_STRING C The query string, as a single (unparsed) string.

REMOTE_ADDR C The IP address of the client.

REMOTE_HOST C The hostname of the client.

REMOTE_USER C The user authenticated by the Web server, if any.

REQUEST_METHOD C A string such as  "GET" or  "POST" .

SERVER_NAME C The hostname of the server.

SERVER_PORT C The port of the server (as a string).

响应

  1.  HttpResponse提供一系列子类
  2. HttpResponseRedirect 301
  3. HttpResponsePermanentRedirect 302
  4. HttpResponseNotModified 304
  5. HttpResponseBadRequest 400
  6. HttpResponseNotFound 404
  7. HttpResponseForbidden 403
  8. HttpResponseNotAllowed 405
  9. HttpResponseGone 410
  10. HttpResponseServerError 500

案例 # HttpResponse(content=响应体,content_type=响应数据类型,status=状态码)

# content:表示返回的内容# status_code:返回的HTTP响应状态码# content_type: 指定返回数据的MIME类型from django_http import HttpResponsedef index(request):  return HttpResponse('欢迎来到Gaidy博客', status=202)

JsonResponse(返回的json数据)

from django.http import JsonResponsedef index(request):  return JsonResponse({'name': 'gaidy', 'age': '25'})

运行结果

redirect重定向

from django.shortcuts import redirect# django_test是路由的空间命名def show(request):  # 重定向  return redirect(reverse('django_test:index'))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    Django项目开发中cookies和session的常用操作分析
    下一条:
    Django 多语言教程的实现(i18n)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Filament v3.1版本发布(0个评论)
    • docker + gitea搭建一个git服务器流程步骤(0个评论)
    • websocket的三种架构方式使用优缺点浅析(0个评论)
    • ubuntu20.4系统中宿主机安装nginx服务,docker容器中安装php8.2实现运行laravel10框架网站(0个评论)
    • phpstudy_pro(小皮面板)中安装最新php8.2.9版本流程步骤(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2018-05
    • 2020-02
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-11
    • 2021-03
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-08
    • 2023-08
    • 2023-10
    • 2023-12
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客