1、先创建项目(django-admin startproject djangourlparams)和app应用(python manage.py startapp app名称)
2、在urlparams中创建urls.py文件。
3、在入口urls.py文件(即和项目settings.py文件保持一致的)写入如下
第一种
1、在urlparams下的urls.py文件中,写入。
from django.urls import path
from urlparams import views
urlpatterns=[
path('args/',views.params_first),
]
from urlparams时需先设置项目搜索根目录。在项目根目录上右键→mark Directory as→Source root即可。
4、在urlparams下的views文件中写入
from django.http import HttpResponse
def params_first(request):
#针对路由的第一种情况,直接从GET请求中获取参数。
user_name=request.GET.get('user','')
pass_word=request.GET.get('pwd','')
result='账号:{},密码:{}'.format(user_name,pass_word)
return HttpResponse(result)
5、此时运行(python manage.py runserver)项目。在浏览器中输入127.0.0.1:8000/args/?user=张飒&pwd=123 然后运行,此时浏览器就会显示如下图所示:
第二种:
1、参数不再以?形式进行拼接,而是以路径/a/a的形式进行传递的。
2、此时在urlparams的urls.py文件中的urlpatterns中写入:re_path(r’^params/(\w+)/(\d+)/$’,views.params)
注: /(\d+)/(\w+)/ 就是给视图函数传递的两个参数。
注:视图函数如何接收,在函数中必须声明两个形参(形参名称可以任意设定)来接收这两个参数。
5、#将re_path转化为path()的写法
re_path(r'^params/(\w+)/(\d+)/$',views.params),
#将re_path转化为path()的写法:
#视图函数接收参数,params1必须声明两个形参(形参的名称必须和路由中指定的参数名称保持一致)。
path('params1///',views.params1)
# re_path(r'^params/(\w+)/(\d+)/$',views.params),
re_path(r'^params/(\w+)/(\d{2})/$',views.params), #指定密码匹配位数限制
# 将re_path转化为path()的写法:
# 视图函数接收参数,params1必须声明两个形参(形参的名称必须和路由中指定的参数名称保持一致)。
# <>是用来匹配参数的。
# <>的参数是可以指定转换器,转换器的作用就是对拦截到的参数进行转化,比如类型的转化,值的转化等。
# 默认的转化器是str
# path('params1///',views.params1),
path('params1///',views.params1), #将接收到的字符串型的password转换为int型。
第三种
1、path()函数除了上述将参数直接以路径的形式传递给视图参数,也可以采用如下方法传递参数。
在urlparams下的urls.py文件中写入如下路由:
path('params2/',views.params2,{'user':'李四','pwd':'123'}),
注:params2()需要设置形参,形参的名字和字典的键保持一致。
2、然后我们在views.py文件中实现params2这个函数。
def params2(request,user,pwd):
result='name====={},pwd====={}'.format(user,pwd)
return HttpResponse(result)
3、此时打开浏览器进行访问127.0.0.1:8000/params2/即可看到如下图所示:
第四种
1、re_path()这种url路由,如何指定参数名称。而上面的re_path中,参数的名称可以任意设定。
2、现在我们在urlparams下的urls.py文件中写入re_path(r’^params3/(?P\w+)/(?P\d+)/$’, views.params3),
# ?P是指定参数名称的固定格式
# 、就是形参的名称,此时视图函数params3()的形参必须和id,username保持一致。
# \d+表示将\d+匹配到的数字参数赋值给形参id。
# \w+表示将\w+匹配到的字符参数,赋值给形参username。
re_path(r'^params3/(?P\w+)/(?P\d+)/$', views.params3),
def params3(request,username,id):
result='name==={},pwd==={}'.format(username,id)
return HttpResponse(result)