美文网首页Django入门教程
django教程--参数传递(GET方式)

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

作者: iffly | 来源:发表于2018-01-13 22:09 被阅读0次

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

    相关文章

      网友评论

        本文标题:django教程--参数传递(GET方式)

        本文链接:https://www.haomeiwen.com/subject/fyehoxtx.html