django路由url传递参数的几种方式
1、path位置传递,注意:参数名必须一致,浪费了我太多时间
url.py中:
path('info/<p1>/<p2>/', Tinfo.as_view())
path('info/<str:p1>/<int:p2>/', Tinfo.as_view()) # 这么写也可以
views.py中:
class Tinfo(APIView): def get(self, request, p1, p2): print('参数是:', p1) return Response('success:{},{}'.format(p1, p2))
浏览器中输入:
127.0.0.1:8000/badmin/info/pkfkfkf/123/
2、re_path,这个与之前的传递方式已经不同了,这个就没有参数名需要一致的问题了,根据参数位置自动匹配
url.py中
from django.urls import re_path re_path('info/(\w+)/(\d+)/', Tinfo.as_view()),
view.py中
class Tinfo(APIView): def get(self, request, p1, p2): print('参数是:', p1) return Response('success:{},{}'.format(p1, p2))
3、关键字传参
path('info',Tinfo.as_view()) # 推荐这种方法:url地址这样写/info?p1=123,获取数据用request.GET.get('p1')
path('info/<str:p1>/<int:p2>/', Tinfo.as_view()) #与上同
GET:
class Tinfo(APIView): def get(self, request): p3 = request.GET.get('p3') return Response('success:{}'.format(p3))
浏览器中输入:
127.0.0.1:8000/badmin/info/pkfkfkf/123/?p3=err
POST取参数:
url.py:
path('info/<str:p1>/<int:p2>/', Tinfo.as_view()) # 与上相同
views.py中:
class Tinfo(APIView): def post(self, request, p1, p2): p4 = request.POST.get('p4') print('另一种参数p4:', p4) return Response('success:{},{}'.format(p1, p2))
浏览器输入:
以上几种方法包含了常用的参数传递方式,如果觉得写得好,请支持一下!