Django 学习 4 表单处理

1.接下来,我们利用现有的Book数据做一个简单的查询页面。这既然是基于Book app的,我们就把搜索视图放在books.views中:
books/views codes:
   
from django.db.models import Q #导入查询对象
    from django.shortcuts import render_to_response #返回response的快捷方法
    from models import Book

    def search(request):
        query = request.GET.get('q','') #request对象的GET方法将查询字符串返回为键:值字典,用get()方法来取字典值可以在不存在键的时候返回一个默认值
        if query:
            qset = (
                Q(title__icontains=query)|
                Q(authors__first_name__icontains=query)|
                Q(authors__last_name__icontains=query)
            )
            results = Book.objects.filter(qset).distinct() #可以让一个Q对象作为filter()方法的参数,Q对象以某种查询逻辑初始化,为查询提供了这种逻辑逻辑。distinct()去重
        else:
            results = []
        render_to_response("books/search.html",{'results':results,'query':query})



2.同时,我们也要有相匹配的查询页面模板,他放在templates/books/下
templates/books/search.html codes:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html lang="en">
    <head>
        <title>Search{% if query %} Results{% endif %}</title>
    </head>
    <body>
      <h1>Search</h1>
      <form action="." method="GET">
        <label for="q">Search: </label>
        <input type="text" name="q" value="{{ query|escape }}">
        <input type="submit" value="Search">
      </form>

      {% if query %}
        <h2>Results for "{{ query|escape }}":</h2>#在所有使用 query 和 book 的地方,我们通过 escape 过滤器来确保任何可能的恶意的搜索文字被过滤出去,以保证不被插入到页面里。


        {% if results %}
          <ul>
          {% for book in results %}
            <li>{{ book|escape }}</l1>
          {% endfor %}
          </ul>
        {% else %}
          <p>No books found</p>
        {% endif %}
      {% endif %}
    </body>
    </html>



3.接下来就是在URLconf中添加视图索引
urls codes:
  
 from django.conf.urls import include, url
    from django.contrib import admin

    urlpatterns = [
        url(r'^search.html$','books.views.search'),
        # Examples:
        # url(r'^$', 'mysite.views.home', name='home'),
        # url(r'^blog/', include('blog.urls')),

        url(r'^admin/', include(admin.site.urls)),
    ]


4.Django拥有创建自定义表单的模板,暂且不议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值