`
qzriso
  • 浏览: 242420 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

Django笔记6(表单处理)

阅读更多
1.搜索
(1) 在URLconf (mysite.urls )添加搜索视图。
(r’^search/$’,'mysite.books.views.search’)

(2) 在视图模块(mysite.books.views )中写这个 search 视图

from django.db.models import Q
from django.shortcuts import render_to_response
from books.models import Book

def search(request):
    query = request.GET.get('q', '')
    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()
    else:
        results = []
    return render_to_response("books/search.html", {
        "results": results,
        "query": query
    })

(3)添加模板

< !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>

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


2.回馈表单
(1)添加URL (r’^contact/$’, ‘mysite.books.views.contact’)
(2)在books目录下建forms.py 文件

#!/usr/local/bin/python
# coding: utf-8

from django import forms

TOPIC_CHOICES = (
    ('general', 'General enquiry'),
    ('bug', 'Bug report'),
    ('suggestion', 'Suggestion'),
)

class ContactForm(forms.Form):
    topic = forms.ChoiceField(choices=TOPIC_CHOICES)
    message = forms.CharField()
    sender = forms.EmailField(required=False)
    #自定义验证
    def clean_message(self):
        message = self.cleaned_data.get('message', '')
        num_words = len(message.split())
        if num_words < 4:
           raise forms.ValidationError("Not enough words!")
        return message

此处需注意添加顶端两行,否则中文注释会出错
(3)添加视图函数

from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from forms import ContactForm
from django.core.mail import send_mail
def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
           topic = form.cleaned_data['topic']
           message = form.cleaned_data['message']
           sender = form.cleaned_data.get('sender', 'noreply@example.com')
           send_mail(
               'Feedback from your site, topic: %s' % topic,
               message, sender,
               ['xuzhibin@mail.39.net']
           )
           return HttpResponseRedirect('/contact/thanks/')                     

    else:
        form = ContactForm()
  
    return render_to_response('contact.html', {'form': form})

为使发email成功,需配置settings.py

EMAIL_HOST=127.0.0.1' #你的smtp 服务器ip 地址或名称
EMAIL_PORT=None #不处理就用Noe,否则指明port
EMAIL_HOST_USER='' #现在大部分邮箱都要求你输入 邮箱的全名
EMAIL_HOST_PASSWORD='' #你的口令
EMAIL_USE_TLS=None #不处理就用None

(4)添加模板

< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>Contact us</title>

</head>
<body>
    <h1>Contact us</h1>
    <form action="." method="POST">
        <div class="fieldWrapper">
            {{ form.topic.errors }}
            <label for="id_topic">Kind of feedback:</label>
            {{ form.topic }}
        </div>
        <div class="fieldWrapper">
            {{ form.message.errors }}
            <label for="id_message">Your message:</label>
            {{ form.message }}
        </div>
        <div class="fieldWrapper">
            {{ form.sender.errors }}
            <label for="id_sender">Your email (optional):</label>
            {{ form.sender }}
        </div>
        <p><input type="submit" value="Submit"/></p>
    </form>
  
</body>
</html>

3. 从模型创建表单
(1)创建URL
(r'^add_publisher/$', 'mysite.books.views.add_publisher')
(2)在forms.py创建一个新Form

from django import forms
from models import *
class PublisherForm(forms.ModelForm):
    class Meta:
        model = Publisher

(3)创建视图函数

from forms import ContactForm,PublisherForm
def add_publisher(request):
    if request.method == 'POST':
        form = PublisherForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/add_publisher/thanks/')
    else:
        form = PublisherForm()
    return render_to_response('books/add_publisher.html', {'form': form})

(4)创建模板文件

< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>Add Publisher</title>
</head>
<body>
    <h1>Add Publisher</h1>
    <form action="." method="POST">
        <table>
            {{ form.as_table }}
        </table>
        <p><input type="submit" value="Submit"/></p>
    </form>
</body>
</html>
分享到:
评论

相关推荐

    django笔记 django笔记

    Django的核心组件包括ORM(对象关系映射)、数据库路由系统、强大的表单处理和内置的认证系统。 2. **安装与设置**: 安装Django可以通过Python的包管理器pip进行,命令为`pip install django`。设置项目时,使用`...

    2019版-千锋Django-源码+笔记.zip

    千锋Django笔记可能涵盖了从安装配置到项目实战的全过程,包括模型定义、视图处理、模板渲染、表单处理、用户认证与授权等重要知识点。思维导图则以可视化的方式,帮助记忆和理解Django的架构和各组件之间的关系,使...

    千锋Django笔记.rar

    【千锋Django笔记】是针对Python Web开发框架Django的一份详细学习资料,这份笔记可能包含了从基础知识到高级特性的全面讲解。Django是一个高效、成熟且功能强大的开源Web框架,它遵循“DRY(Don't Repeat Yourself...

    千锋教育Django笔记

    【千锋教育Django笔记】是一份专门为初学者设计的学习资料,它涵盖了Django框架的基础知识和实战技巧。Django是Python编程语言中一个强大的、免费的开源Web应用框架,它遵循模型-模板-视图(MTV)架构模式,旨在简化...

    django学习笔记

    Django提供了强大的表单处理能力,可以自定义表单类,自动处理数据验证、渲染HTML和处理POST数据。通过`forms.py`文件定义表单,然后在视图中使用并渲染到模板。 6. **中间件(Middleware)** 中间件是Django中的...

    Django学习笔记.zip

    6. **RESTful Framework**:Django REST framework是一个强大的工具,用于构建RESTful API。它提供了序列化、分页、权限控制、过滤、格式化等功能,使得API的开发更为简便。RESTful设计原则强调资源和动词的分离,...

    Django学习笔记.doc文件.rar

    在本压缩包中,"Django学习笔记.doc文件.rar"包含了一份详尽的Django框架学习资料,由以下几个部分组成: 1. **用户身份验证.doc**:这部分讲述了Django内置的身份验证系统,包括如何创建用户账户,登录和登出功能...

    Django学习笔记.pdf

    6. 静态文件管理:Django提供了静态文件的管理功能,包括静态文件的收集、压缩等,使得开发过程中静态资源的管理变得非常方便。 7. 国际化和本地化:Django支持国际化和本地化,这意味着可以很容易地将Web应用翻译...

    django框架学习笔记

    7. **表单(Form)**:Django提供了强大的表单处理功能,可以自动生成HTML表单,处理用户提交的数据,进行验证。 8. **中间件(Middleware)**:中间件是Django中的特殊组件,可以全局改变请求和响应处理流程。 9....

    Django学习笔记月伴之夜.

    Django的表单系统简化了处理用户输入的过程。可以自定义表单类,结合视图处理POST请求,以及渲染HTML表单。 9. **中间件(Middleware)**: 中间件提供了一种全局修改请求和响应的方法,可以用来实现登录检查、...

    Django课件笔记详解

    - **定义表单**: Django提供内置的表单处理机制,可以自定义表单类,映射到模型或独立字段。 - **数据验证**: 表单负责验证用户提交的数据,确保其符合预期格式和规则。 ### 7. 用户认证与权限 - **用户模型**: ...

    django 学习笔记(1)—— python和web开发框架(csdn)————程序.pdf

    Django还包含了身份验证、表单处理、缓存管理等高级功能,使Web开发变得更加便捷和高效。此外,Django遵循DRY(Don't Repeat Yourself)原则,鼓励代码重用,减少冗余。 总结来说,Django是一个强大的Python Web...

    Django restframework课件笔记详解

    本课件笔记将深入探讨DRF的核心概念、功能模块及其在实际项目中的应用。 一、DRF简介 DRF是一个用于构建Web API的高级框架,它为Django添加了额外的组件,如序列化、认证、权限控制和分页,让API开发变得更加简单。...

    python+django学习笔记

    Django还包括内置的表单处理,可以自动生成HTML表单并验证用户输入。此外,Django提供了一套强大的认证和授权系统,包括用户注册、登录、权限管理等功能。对于大型网站,Django的分层Session和缓存机制也能有效提高...

    django笔记2

    【Django笔记2】 在IT行业中,Web开发是一项至关重要的任务,Django作为一个强大的Python Web框架,被广泛用于构建高效且安全的Web应用程序。本文主要围绕Django的基础知识展开,包括HTTP协议、Web服务器和Web框架...

    基于Django实现云笔记项目.zip

    Django提供了许多内置功能,如数据库管理、用户认证、表单处理和URL路由,使得开发者能够快速构建复杂的Web应用。 2. 项目结构: Django项目通常由多个应用组成,每个应用专注于特定的功能。在这个项目中,可能有...

    学习Django的笔记和代码

    此外,Django还提供了URL路由系统、表单处理、认证和授权机制、中间件、管理后台等强大功能。通过URLconf,你可以将URL映射到特定的视图函数。表单处理简化了数据验证和用户输入处理。Django的内置认证系统则方便了...

    Django 学习笔记

    **Django 学习笔记** 在深入探讨Django这一强大的Python Web框架之前,我们首先要理解其基本概念。Django是一个开放源代码的Web框架,它遵循模型-视图-控制器(MVC)架构模式,但Django将其称为模型-视图-模板(MVT...

    django学习笔记,共15章+sql操作命令

    Django提供了强大的表单处理机制,包括自动生成HTML表单、数据验证和错误处理。本章会深入讨论这些功能。 ### 第八章:用户认证与权限 Django内置了用户认证系统,包括注册、登录、密码重置等功能。我们还将了解...

Global site tag (gtag.js) - Google Analytics