14、DRF实战总结:获取Django请求路径的方法以及各自的区别

注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,欢迎关注公众号:CTO Plus

关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

 

Django项目开发中经常需要在视图中获取用户当前请求url的地址,然后进行跳转或判断操作,比如是否在url黑白名单里。Django提供了多种获取请求路径的实现方式,比如request.path, request.path_info, request.get_full_path和request.build_absolute_uri。

请求URL示例:http://localhost/v1/articles_cbv/?page=2&size=3

request.path

request.path仅提供相对于根目录的url相对路径,不包含域名和参数。它的输出是一个字符串,结果如下所示:

`/v1/articles_cbv/`

request.path_info

request.path_info也仅提供相对于根目录的url相对路径,不含参数。它的输出也是一个字符串,与request.path相同:

`/v1/articles_cbv/`

request.path_inforequest.path的区别:

Django推荐使用request.path_info获取不含参数的相对urls路径。

大部分情况下request.path_inforequest.path的输出结果是一样的。但是如果WSGI服务器设置了WSGIScriptAlias(应用程序的假名, 比如myapp)那么request.path将输出`/myapp/v1/articles_cbv/`request.path_info的输出结果更准确,依然为`/v1/articles_cbv/`

request.get_full_path

用于获取包含完整参数的相对于根目录的相对url路径,包含域名和查询参数。它的直接输出内容是个WSGI请求对象。

<bound method HttpRequest.get_full_path of <WSGIRequest: GET '/v1/articles_cbv/?page=2&size=3'>>

如果要获取字符串形式的完整url路径,一定要不要忘了在后面加括号。

request.get_full_path()的输出结果为:

‘/v1/articles_cbv/?page=2&size=3’

如果希望在路径里忽略应用程序假名,可以使用request.get_full_path_info()

/v1/articles_cbv/?page=2&size=3

request.build_absolute_uri()

该方法用于获取带域名的url绝对路径, 也是一个字符串,包含协议、域名、端口和路径以及查询参数。如下所示。需要加括号。

`http://localhost/v1/articles_cbv/?page=2&size=3`

输入才有输出,吸收才能吐纳。——码字不易

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Django中实现RESTful web service,可以使用Django REST framework(简称DRF)。DRF是一个强大的框架,提供了许多构建RESTful web service所需的工具和功能。 以下是一些实现RESTful web service的步骤: 1. 安装DRF 使用pip安装DRF: ``` pip install djangorestframework ``` 2. 配置DRF 在settings.py中添加DRF: ``` INSTALLED_APPS = [ ... 'rest_framework', ... ] ``` 3. 创建API视图 创建一个API视图来处理API请求。可以使用DRF提供的APIView类或者其他视图类,比如GenericAPIView、ViewSet等。 ``` from rest_framework.views import APIView class MyApiView(APIView): def get(self, request): # 处理GET请求 ... def post(self, request): # 处理POST请求 ... ``` 4. 添加URL 在urls.py中添加URL,将API视图绑定到URL: ``` from django.urls import path from .views import MyApiView urlpatterns = [ path('myapi/', MyApiView.as_view()), ] ``` 现在,可以使用http://localhost:8000/myapi/访问API。 5. 序列化数据 在API视图中,需要将数据序列化为JSON格式返回。可以使用DRF提供的序列化器来完成这个任务。 ``` from rest_framework import serializers class MySerializer(serializers.Serializer): name = serializers.CharField() age = serializers.IntegerField() class MyApiView(APIView): def get(self, request): data = {'name': 'John', 'age': 30} serializer = MySerializer(data) return Response(serializer.data) ``` 现在,访问http://localhost:8000/myapi/将返回JSON格式的数据。 6. 处理请求和响应 在API视图中,需要处理请求和响应。可以使用DRF提供的Request和Response类来完成这个任务。 ``` from rest_framework.request import Request from rest_framework.response import Response class MyApiView(APIView): def get(self, request): name = request.query_params.get('name') ... return Response(data) ``` 以上就是Django实现RESTful web service的主要步骤。当然,DRF提供了许多其他的功能和工具,可以根据具体的需求进行使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值