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参数的传递以及表单的提交。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Django Rest Framework (DRF)支持模糊过滤(Fuzzy filtering)功能,可以帮助你在API中进行更精细的数据筛选。 要启用模糊过滤功能,你需要定义一个过滤器类,并在视图中使用它。以下是一个简单的例子: ```python from rest_framework import filters class MyFilter(filters.SearchFilter): search_param = 'q' # 定义模糊匹配的字段 search_fields = ['name', 'description'] class MyView(APIView): filter_backends = [MyFilter] def get(self, request): queryset = MyModel.objects.all() queryset = self.filter_queryset(queryset) serializer = MySerializer(queryset, many=True) return Response(serializer.data) ``` 在上面的例子中,我们定义了一个名为`MyFilter`的过滤器类,它继承自DRF自带的`SearchFilter`类。我们定义了一个`search_fields`属性,指定了要模糊匹配的字段。我们还定义了一个`search_param`属性,指定了要传递给API的查询参数的名称(默认为`search`)。 在视图中,我们将`MyFilter`添加到`filter_backends`列表中。然后我们通过调用`self.filter_queryset(queryset)`方法来过滤查询集(在`get`方法中)。 现在,我们可以在API中使用`q`参数进行模糊匹配。例如,我们可以通过以下方式获取所有`MyModel`对象中名称或描述中包含“django”的对象: ``` GET /myview/?q=django ``` DRF还支持其他类型的过滤器,例如`DjangoFilterBackend`和`OrderingFilter`等。你可以在DRF文档中了解更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值