django教程--参数传递(GET方式)
web开发过程中最常见的两种参数传递方式为GET和POST,今天我们就来了解下Django中如何使用GET进行参数传递。
GET传参##
Django中GET参数具有两种传递方式,一种为传统的'?'形式传参,一种为正则匹配参数传递。
传统传参
web中最常见的传参方式为'?'问号后参数,例如/plist/?p1=china&p2=2012,其中p1,p2为键值,'='后为传递的参数值,在后台通过键值来获取对应的参数值。下面我们就通过一个例子来简单的展示下Django中如何使用此种传参的方式。
我们先新建一个工程
django-admin.py startproject PostParams
然后在工程目录下新建一个app
django-admin.py startapp app
之前没有向大家介绍,django项目结构为project-->app,在同一个project把具有相同功能或同一功能的模块封装为一个moudle,即为app,在后面的博客项目中大家会进一步了解,在此先简单了解这个概念。
然后在setting.py中的INSTALLED_APPS添加新建的app,代码如下:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app',#your app
)
然后在app目录下views.py添加以下代码
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def params_test(request):
str=request.GET.get('str','')
page=request.GET['page']
return HttpResponse('str='+str+'&page='+page)
然后在urls.py中配置路由,代码如下
from django.conf.urls import patterns, include, url
from django.contrib import admin
from app.views import params_test
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'PostParams.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^params_test/$',params_test)
)
然后同步创建数据库
python manage.py migrate #django1.7及以后
python manage.py syncdb #django 1.7以前
然后运行服务器
python manage.py runserver
打开浏览器输入127.0.0.1:8000/params_test/?str=hhh&page=1,即可看到我们传递的参数
可以看到,Django传递GET参数方式非常简单,后台我们只需要通过request里的GET字典即可获取对应的参数值,需要注意的是获取的参数均为字符串类型,对于不同的应用场景我们需要进行转换。
正则表达式传参
--
Django中的路由系统是通过正则表达式进行匹配的,即在urls.py配置不同的正则表达拦截然后传递到对应的view函数中,如上面
from django.conf.urls import patterns, include, url
from django.contrib import admin
from app.views import params_test
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'PostParams.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^params_test/$',params_test)
)
即对请求的url进行正则匹配,如果满足正则表达式'^params_test/$',即将请求分发给我们的视图函数params_test。
Django的路由系统不仅仅可以将进行正则匹配,还可以通过正则表达式来进行参数传递,下面我们就来演示下具体用法。
我们继续在刚刚新建的app views.py里新加函数,代码如下:
def params_test_reg(request,str,page):
return HttpResponse('str='+str + '&page=' + page)
,然后我们修改urls.py代码如下
from django.conf.urls import patterns, include, url
from django.contrib import admin
from app.views import params_test, params_test_reg
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'PostParams.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^params_test/$',params_test),
url(r'^params_test_reg/str(\w+)page(\d+)/$',params_test_reg),
)
再次运行服务器,在浏览器输入http://127.0.0.1:8000/params_test_reg/strstrvaluepage1/
即可看到后台正确接收到了传递的参数。
我们可以看到,在url正则表达式通过'()'来匹配传递的参数,如'(\w+)'代表匹配字符串,如果不了解正则表达式建议先去看下正则表达式,然后在视图函数的形参中加入对应数量的参数(必须在视图函数的形参中接收),即可在后台接收到传入的参数,他会根据对应的顺序依次赋值。当然我们也可以在匹配参数过程中指定对应的形参名称,接下来继续看代码。
修改urls.py如下:
from django.conf.urls import patterns, include, url
from django.contrib import admin
from app.views import params_test, params_test_reg
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'PostParams.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^params_test/$',params_test),
url(r'^params_test_reg/str(?P<str>\w+)page(?P<page>\d+)/$',params_test_reg),
)
然后修改params_test_reg函数形参顺序
def params_test_reg(request,page,str):
return HttpResponse('str='+str + '&page=' + page)
重新启动服务器,在浏览器输入http://127.0.0.1:8000/params_test_reg/strstrvaluepage1/
,我们会发现参数还是正确接收啦。
好了,本节到此结束,通过本节大家学会了如何在python中使用GET进行参数传递,下一节我将会继续和大家一起探讨POST参数的传递以及表单的提交。
最近参加支付宝小程序比赛需要访问量,麻烦各位看官有空复制下面的话打开支付宝,搜索栏粘贴,在此多谢各位支持了
#JvCmawp74I1#长按复制此消息,打开支付宝搜索,体验南京疫情地图小程序
网友评论