求Django常用语法,接受get和post参数的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求Django常用语法,接受get和post参数的方法相关的知识,希望对你有一定的参考价值。

1、首先登录CentOS7系统,打开终端,进入python3虚拟环境,创建工程djbd,在工程中创建app,命令如下。

2、在工程的settings.py文件,添加app信息,并在allowed_host中添加本机ip。

3、在工程的urls.py文件include进app的urls.py,vi urls.pyurls.py文件如下。

4、在app中创建urls.py文件cd ../bookvi urls.py,并写代码如下。

5、然后运行django工程cd ..python manage.py runserver 192.168.128.25:8000 ,最后的ip就是填入allowed_host的本机ip,在8000端口上运行。

6、然后打开POSTMAN,可以是局域网中任意台电脑,请求方式为POST,网址和body传入参数如下图。

7、最后控制台打印出提交的参数something,就完成了。

参考技术A query = request.GET.get('q', '')

寻找名为 q 的GET参数,而且如果参数没有提交,返回一个空的字符串。

注意在 request.GET 中使用了 get() 方法,这可能让大家不好理解。这里的 get() 是每个python的的字典数据类型都有的方法。使用的时候要小心:假设 request.GET 包含一个 'q' 的key是不安全的,所以我们使用 get('q', '') 提供一个缺省的返回值'' (一个空字符串)。如果只是使用 request.GET['q'] 访问变量,在Get数据时 q 不可得,可能引发 KeyError .
参考技术B name=request.REQUEST.get('name','xxx')
#get/post请求都可以用这么来接收参数
#获取参数name的值;如果请求里没有name,则给name赋值xxx追问

get是request.REQUEST.get('name','xxx')?

post是request.REQUEST.post('name','xxx')?

name是什么?xxx又是什么?接受参数不是有name就够了吗?

追答

不管是get请求,还是post请求,都可以用request.REQUEST.get('username','xxx')
如果是get请求,username就是请求url后面带的参数,比如:http://xxx/?username=tom。
如果是post请求,那么form表单里需要有一个name=“username” ,例如:

这样的话,request.REQUEST.get('username','xxx') 就能得到username的值:tom 。
假如get请求后面没有带?username=tom ,post请求的表单里没有name='username'的元素,那么在后台request.REQUEST.get('username','xxx') 得不到值,就会用 xxx 来作为默认值。

本回答被提问者采纳

Django url 不接受参数

【中文标题】Django url 不接受参数【英文标题】:Django urls not taking arguments 【发布时间】:2016-10-31 18:29:56 【问题描述】:

我真的很难理解将参数和关键字参数发送到 Django url 的方法。以下是案例研究:

我有一个使用通用基础视图的视图:

class CartView(View):
   def get(self, request, *args, **kwargs):
       item = request.GET.get('item')
       qty = request.GET.get('qty')
       print item, qty
       return HttpResponseRedirect('/')

通过上面的视图,我可以使用 url 中的参数,如 "localhost:8000/cart/?item=4&qty=200",并在终端中打印带有数量的项目。

一旦我对代码进行了更改,例如:

from carts.models import Cart, CartItem
from products.models import Variation


class CartView(View):
    def get(self, request, *args, **kwargs):
        item_id = request.GET.get('item')
        if item_id:
            item_instance = get_object_or_404(Variation, id=item_id)
            qty = request.GET.get('qty')
            cart = Cart.objects.all()[0]
            cart_item = CartItem.objects.get_or_create(cart=cart, item=item_instance)[0]
            cart_item.quantity = qty
            cart_item.save()
            print cart_item
        return HttpResponseRedirect('/')

以同样的方式传递像"localhost:8000/cart/?item=4&qty=200" 这样的参数,它向我显示了错误:

404 Page Not Found No Variation 匹配给定的查询。

urls.py

urlpatterns = [
    url(r'^home/$', 'newsletter.views.home', name='home'),
    url(r'^contact/$', 'newsletter.views.contact', name='contact'),
    url(r'^about/$', 'project.views.about', name='about'),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^accounts/', include('registration.backends.default.urls')),
    url(r'^cart/$', CartView.as_view(), name='cart'),
    url(r'^', include('products.urls')),
    url(r'^categories/', include('products.urls_categories')),

【问题讨论】:

Is it possible to pass query parameters via Django's % url % template tag?的可能重复 因为您没有 ID 为 4 的 Variation 对象 我将参数传递给具有变体对象的偶数产品。同样的问题。其次,我创建了一个 post_save 信号来转换所有具有默认变化的产品,以便在购物车中更好地处理它。现在我只是在变体上实现购物车。 那是我的错误,我删除了一些测试产品并且 ID 被更改为 10。问题是数据库如果 ID 保存 1 到 10 并且我们删除过去的产品,那么新保存的产品将具有上面的 ID 10.我去manage.py shell并在那里导入Variation。然后将 Variation.objects.all().first() 保存在一个变量中。当我调用 variable.id 时,它向我显示了第一个产品的 14。因此,当我使用 item=14 传递参数时,它接受了它。 @Antoine Pinsard 你是对的。发表你的答案,我会标记它。 【参考方案1】:

404 页面未找到

没有变体匹配给定的查询。

这条消息来自您的线路:

item_instance = get_object_or_404(Variation, id=item_id)

这意味着您没有与给定id 匹配的Variation 对象。

【讨论】:

以上是关于求Django常用语法,接受get和post参数的方法的主要内容,如果未能解决你的问题,请参考以下文章

django-视图

python测试开发django-129.jQuery中$.get()和$.post()提交方法学习

Django之视图层

Django url 不接受参数

Django回顾--获取请求参数的几种方式

Django的路由系统