`

Django(Chapter07 表单)

阅读更多
1. HttpRequest对象包含当前请求URL的一些信息:
                         
属性/方法说明举例
request.path除域名以外的请求路径,以正斜杠开头"/hello/"
request.get_host主机名(比如,通常所说的域名)"172.0.0.1:8000"or "www.example.com"
request.get_full_path()请求路径,可能包含查询字符串"/hello/?print=true"
request.is_secure如果通过HTTPS访问,则此方法返回True,否则返回FalseTrue或者False

  
2. 有关request的其他信息:
   request.META是一个Python字典,包含了所有本次HTTP请求的Header信息。
   这个字典中几个常见的键值:
       HTTP_REFERER, HTTP_USER_AGENT, REMOTE_ADDR
   request.GET和request.POST,二者都是类字典对象,可以通过它们来访问
   GET和POST数据。

3. POST数据是来自HTML中的<form>标签提交的,而GET数据可能来自<form>提交也可能
   是URL中的查询字符串(the query string)。


4. 一个简单的例子:
   在books app中
   4.1 建立好models.py,建立好数据库
   4.2 建立好App,并添加到settings.py文件中
      
        INSTALLED_APPS = (
            'mysite.books',
        )
       

   4.3 添加好模板的路径,在settings.py中设置
      
        import os
        TEMPLATE_DIRS = (
            os.path.join(os.path.dirname(__file__), 'books').replace('\\','/'),                  
        ) 
       

   4.4 添加好url
   4.5 添加视图(views.py):
      
        from django.shortcuts import render_to_response

        def search_form(request):
            return render_to_response('search_form.html')

        from django.http import HttpResponse
        from django.shortcuts import render_to_response
        from mysite.books.models import Book

        def search(request):
            errors = []
            if 'q' in request.GET :
                q = request.GET['q']
                if not q:
                    errors.append('Enter a search term.')
                elif len(q) > 20:
                    errors.append('Please enter at most 20 characters.')
            else:
                books = Book.objects.filter(title__icontains=q)
                return render_to_response('search_results.html',{'books':books, 'query':q})

            return render_to_response('search_form.html', { 'errors': errors })

       


   4.6 html显示
   search_form.html
  
    <html>
    <head>
        <title>Search</title>
    </head>

    <body>
        {% if errors %}
            <ul>
                {% for error in errors %}
                <li>{{ error }}</li>
                {% endfor %}
            </ul>
        {% endif %}
        <form action="" method="get">
            <input type="text" name="q">
            <input type="submit" value="Search">
        </form>
    </body>
    </html>
   

   这里的action="",代表了和当前请求在同一级目录。

   search_results.html
  
    <p>You searched for:<strong>{{ query }}</strong></p>
    {% if books %}
        <p>Found {{ books|length }} book{{ books|pluralize }}.</p>
        <ul>
            {% for book in books %}
            <li>{{ book.title }}</li>
            {% endfor %}
        </ul>
    {% else %}
        <p>No books matched your search criteria.</p>
    {% endif %}
   


5. 第一个Form类
   Django带有一个form库,称为django.forms
   这个类做了几件事情:
       a. 将自己显示成HTML
          新建一个contacts app,并建立一个forms.py,代码如下
         
           from django import forms

           class ContactForm(forms.Form):
               subject = forms.CharField(min_length=5,max_length=100)
               email = forms.EmailField(required=False, label='Your e-mail address')
               message = forms.CharField(widget=forms.Textarea)

              def clean_message(self):
                  message = self.cleaned_data['message']
                  num_words = len(message.split())
                  if num_words < 4:
                      raise forms.ValidationError('Not enough words!')
                 return message
          

       b. 提供验证
          >>> from contact.forms import ContactForm
          >>> f = ContactForm()
          >>> print f         
          >>> print f.as_ul()
          >>> print f.as_p()
          >>> print f['subject']
          >>> f = ContactForm({'subject':'Hello', 'email':'adrian@example.com', 'message':'Nice site!'})
          >>> f.is_bound
          >>> f.is_valid()
          >>> f['subject'].errors
          >>> f=ContactForm({'subject':'Hello','message':''})
          >>> f.errors
   2 contacts app中的views.py
    
      from django.core.mail import send_mail
      from django.shortcuts import render_to_response
      from mysite.contacts.forms import ContactForm

      def contact(request):
          if request.method == 'POST':
             form = ContactForm(request.POST)
             if form.is_valid():
                cd = form.cleaned_data
                send_mail(
                    cd['subject'],
                    cd['message'],
                    cd.get('email', 'noreply@example.com'),
                    ['siteowner@example.com'],
                    )
            return HttpResponseRedirect('/contacts/thanks/')
          else:
              form = ContactForm(
                initial={'subject':'I love your site!'})

         return render_to_response('contact_form.html',{'form':form})
     

    
    3. html(contact_form.html)
    
     <html>                                                                
    <head>
        <title>Contact us</title>
        <style type="text/css">  
            ul.errorlist{        
                margin:0;        
                padding:0;       
            }                    
            .errorlist li {      
                background-color:red;
                color:white;         
                display:block;       
                font-size:10px;      
                margin:0 0 3px;
                padding:4px 5px;
            }
        </style>
    </head>

    <body>
        <h1>Contact us</h2>

        {% if form.errors %}
            <p style="color:red;">
            Please correct the error{{ form.errors|pluralize }} below.
            </p>
        {% endif %}

        <form action="" method="post">
            {% csrf_token %}
            <div class="field">
                {{ form.subject.errors}}
                <label for="id_subject">Subject:</label>
                {{form.subject}}
            </div>
            <div class="field">
                {{ form.email.errors }}
                <label for="id_email">Your e-mail address:</label>
                {{ form.email }}
            </div>
            <div class="field">
                {{ form.message.errors }}
                <label for="id_message">Message:</label>
                {{ form.message }}
            </div>
            <input type="submit" value="submit">
        </form>
    </body>
</html>
     
分享到:
评论

相关推荐

    Python Django VS web 表单实例

    本实例将深入探讨Django在处理Web表单方面的优势和用法,与一般的Web表单处理进行对比。 首先,Django提供了一套完整的MVC(模型-视图-控制器)架构,其中的View层负责处理HTTP请求,包括用户提交的表单数据。在...

    Django自定义表单引擎Autoforms.zip

    Autoforms是Jeff开源的一个基于Django的自定义表单引擎,可用于调查、投票、信息收集甚至是整合至工作流程引擎和PAAS平台当中。 AutoForms的主要特性: 支持14种字段类型13种html输入控件(包括日期选择组件)...

    Django:Django表单处理与数据验证.docx

    Django:Django表单处理与数据验证.docx

    Python关于 Django 的web- Form 表单验证

    在Python的Web开发框架Django中,Form表单验证是一个至关重要的部分,它允许开发者创建用户界面并确保从用户那里接收到的数据是有效且安全的。Form类是Django提供的一个强大工具,用于处理HTTP请求中的数据,进行...

    django中ModelForm多表单组合的解决方案.docx

    Django 中 ModelForm 多表单组合的解决方案 Django 是 Python 语言快速实现 web 服务的大杀器,其开发效率可以非常高!但是,Django 框架又太灵活,以至于想实现任何功能都有种“条条大路通罗马”的感觉。那么,在 ...

    8. Django 表单与模型

    在Django框架中,表单和模型是两个非常重要的概念,它们构成了数据处理的核心部分。本文将深入探讨Django中的表单(Forms)和模型(Models),以及它们如何协同工作来构建高效、安全的Web应用。 ### Django模型...

    Two Scoops of Django 1.11: Best Practices for the Django Web Framework.pdf

    Chapter 2: The Optimal Django Environment Setup Chapter 3: How to Lay Out Django Projects Chapter 4: Fundamentals of Django App Design Chapter 5: Settings and Requirements Files Chapter 6: Model Best ...

    djangoformapi为Django的表单验证创建JSONAPIs

    `django-formapi` 是一个用于 Django 框架的库,它使得开发者能够快速、方便地为 Django 表单验证创建符合 JSONAPI 规范的 RESTful API。这个库的目标是简化处理表单数据的过程,尤其是当你的应用需要通过 API 接收...

    Django forms表单 select下拉框的传值实例

    在Django框架中,表单(forms)是处理用户输入数据的重要工具,它简化了前后端交互的过程。本文将深入探讨如何在Django forms中创建一个包含`select`下拉框的表单,并且理解其传值机制。 首先,我们需要在`forms.py...

    django layui表单加图片上传功能(Django,layui).zip

    使用Django的表单系统创建一个`ImageForm`,它将与Layui的表单元素配合工作。在表单中,添加`ImageField`,并确保设置`widget`为`ClearableFileInput`,以便提供删除图片的选项。 ```python from django import ...

    Python.Django视频教程.zip

    Django-07-数据库使用-01.rar Django-08-数据库使用-02.rar Django-09-数据库使用_03.rar Django-10-数据库使用_04.rar Django-11-数据库使用_05.rar Django-12-数据库使用_06.rar Django-13-表单_01.rar Django-13-...

    Django Form表单上传文件.zip

    在Django框架中,表单(Form)是处理用户数据的核心工具,特别是在处理文件上传时。本教程将深入探讨如何使用Django Forms来实现文件上传功能。 首先,我们需要了解Django Form的基本结构。在Django中,创建一个...

    Django.Unleashed.0321985079.epub

    Chapter 1 Starting a New Django Project: Building a Startup Categorizer with Blog Chapter 2 Hello World: Building a Basic Webpage in Django Chapter 3 Programming Django Models and Creating a SQLite ...

    Django——表单.doc

    《Django中的表单操作详解》 在Django框架中,表单是一个核心概念,它在Web应用中扮演着至关重要的角色,用于处理用户输入的数据。本文将详细讲解Django中如何创建和处理表单,包括GET和POST两种请求方式。 首先,...

    Django之Form表单验证及Ajax验证方式汇总

    在Python的Web开发框架Django中,Form表单是处理用户输入数据的重要工具。它不仅提供了数据验证功能,还能帮助我们构建美观的HTML表单。本教程将详细讲解Django的Form表单验证以及如何结合Ajax实现无刷新验证。 ...

    Python-djangocmsforms最简单灵活的DjangoCMS表单生成器

    **Python-djangocmsforms:打造最简单灵活的DjangoCMS表单生成器** Django CMS 是一个功能强大的开源内容管理系统,它允许开发者构建高度可定制的网站,而无需深入HTML和CSS的底层细节。然而,对于网站交互性的提升...

    django_guo提交表单.zip

    在Django框架中,提交表单是一个常见的任务,它涉及到前端与后端的交互,以及数据验证和处理。本项目"django_guo提交表单.zip"包含了一个完整的Django应用,用于展示如何创建并处理表单提交。然而,值得注意的是,这...

    form_designer:Django的简单表单设计器

    表单设计器-Django的简单表单设计器 这个表单设计者不会尝试通过管理界面而不是直接在Python代码中提供Django表单的所有最后配置可能性。 相反,它致力于成为每个人都可以立即使用的工具,而无需冗长的解释。 它提供...

Global site tag (gtag.js) - Google Analytics