django开发注意点

本文介绍了Django中ORM的基本查询技巧,包括通过视图函数处理HTTP请求与响应、从URL中提取参数、使用filter进行模糊匹配查询、get方法获取单个对象、以及如何通过order_by结合切片语法限制返回的数据量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.每一个视图函数都有一个HttpResquest对象的参数,返回HttpResponse对象

2.从url中获取除了request的其他参数

   url(r '^time/(\d{1,2})/$', views.time)    其中(\d{1,2}) 就是传给视图函数time的参数

3.filter模糊匹配

      >>> Publisher.objects.filter(name__contains="press")
      [<Publisher: Apress>]

namecontains 之间有双下划线。和Python一样,Django也使用双下划线来表明会进行一些魔术般的操作。这里,contains部分会被Django翻译成LIKE语句:

      SELECT id, name, address, city, state_province, country, website
      FROM books_publisher
      WHERE name LIKE '%press%';

4. get获取单个对象

     Publisher.objects.get(name=press)          当查询的结果是list时,会报错

5.限制返回的数据

另一个常用的需求就是取出固定数目的记录。 想象一下你有成千上万的出版商在你的数据库里, 但是你只想显示第一个。 你可以使用标准的Python列表裁剪语句:

    >>> Publisher.objects.order_by('name')[0]
    <Publisher: Apress>

这相当于:

    SELECT id, name, address, city, state_province, country, website
    FROM books_publisher
    ORDER BY name
    LIMIT 1;

类似的,你可以用Python的range-slicing语法来取出数据的特定子集:

     >>> Publisher.objects.order_by('name')[0:2]

这个例子返回两个对象,等同于以下的SQL语句:

    SELECT id, name, address, city, state_province, country, website
    FROM books_publisher
   ORDER BY name
   OFFSET 0 LIMIT 2;

注意,不支持Python的负索引(negative slicing):

   >>> Publisher.objects.order_by('name')[-1]
   Traceback (most recent call last):
   ...
   AssertionError: Negative indexing is not supported.

虽然不支持负索引,但是我们可以使用其他的方法。 比如,稍微修改 order_by() 语句来实现:

  >>> Publisher.objects.order_by('-name')[0]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值