`
qzriso
  • 浏览: 235674 次
  • 性别: 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-Semantic-UI-Forms:Django对语义UI的扩展

    Django语义UI表单Django形成了语义UI的扩展。要求将语义UI表单添加...用法加载semanticui模板标记-{%load语义ui%}使用语义ui过滤您的表单变量-{{form | semanticui}}笔记这只是一个基本版本,尚未完成任何错误字段。

    django-markdown-app:Django markdown支持和所见即所得

    Django markdown是django应用程序,允许在网页,管理表单和其他表单中使用所见即所得。 可在或上文档。 内容 使用django_markdown 设定值 例子 变化 错误追踪器 贡献 贡献者 执照 版权 要求 Django&gt; = 2.0,&lt;2&gt; ...

    django-mongogeneric:mongodb的基于类的通用视图

    笔记并非Django提供的所有视图都已实现。 如果发现缺少mixin或视图,请随时实现它们并提供拉取请求:-)要求的Django&gt; = 1.3 &gt; = 0.6 已实施的意见详细视图列表显示创建视图更新视图删除视图Django提供的用于构建上述...

    yawd-elfinder:一个基于 elfinder 的 Django 文件管理解决方案

    还提供了一个自定义模型字段(绑定到一个漂亮的表单小部件)。 因此,您可以通过 Django 管理界面轻松管理文件,将它们分配给模型字段并访问 Django 模板中的文件 URL。 yawd-elfinder可以管理本地文件,但也可以...

    Django中session的使用笔记

    说明 ...通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户。对于静态网站,这可能不是个问题,而对于动态...通过Cookie可以保存一些诸如用户名、浏览记录、表单记录、

    django-multi-forms:在一页上的一个视图中用于多种形式的方法

    笔记 这不是在项目中使用的Django应用。 这是一个简单的示例,说明如何在一页的一个视图中使用多种表单。 前提是您已经在使用基于类的视图,那么您应该能够将代码复制到项目中并使其工作最少。 如果您需要帮助,...

    writerPrj:样例DjangoPython网站

    它使用Django,Python,Crispy表单,B​​ootstrap,Javascript / HTML / CSS,Greensock的TweenMax和django-blog-it进行博客撰写。 访问该网站 版本0.1 使用Python 3.5 有关已安装模块及其版本的列表,请参见...

    Python学习笔记:7.3.2 注册

    前言:本文是学习网易微专业的《python全栈工程师 – Django快速建站》课程的笔记,欢迎学习交流。同时感谢老师们的精彩传授! 一、课程目标 实现用户注册功能 二、详情解读 2.1.用户注册 2.1.1.基本功能 填写注册...

    cutshort:切短的长URL。 使用Django,MySQL构建。 住在

    给自己一些笔记/头脑风暴我们如何将其扩展因此,我们将其分为两部分更短的重定向器较短的对象基本上会将所有创建/写入的内容写入db表。 它将在create.cutshort.in上托管/操作,重定向器将执行所有重定向,因此...

    boilerplate:龙卷风样板

    WebAssets 和 SASS] 管理面板 [使用schematics-wtf 动态创建表单] 烧瓶风格的 URL 装饰器TicTacToe 作为 websocet 示例去做: 改进管理面板(将所有处理程序加入一个安静的类)补充笔记SASS 文档在这里: : 安装: $...

Global site tag (gtag.js) - Google Analytics