Django入门教程

django教程--参数传递(GET方式)

2018-01-13  本文已影响0人  iffly

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#长按复制此消息,打开支付宝搜索,体验南京疫情地图小程序
上一篇下一篇

猜你喜欢

热点阅读