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

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#长按复制此消息,打开支付宝搜索,体验南京疫情地图小程序
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容