Python(7)——Django之表单

    在之前hello python的例子中:

from django.http import HttpResponse
    
    def hello(request):
        return HttpResponse("Hello python")

    

    HttpRequest有一些参数和属性我们需要了解下,包括URL相关信息(如请求路径、主机地址、是否通过https访问)、request.META字典集合(用户ip地址、浏览器名称版本号等),

    还有一个就是我们今天要了解的request.GET和request.POST类字典对象,分别对应于表单提交的GET和POST方法。

    

    下面来看个例子:

    search_form.html

<html>
        <head>
            <title>Search</title>
        </head>
        <body>
            <form action="/search/" method="get">
                <input type="text" name="q">
                <input type="submit" value="Search">
            </form>
        </body>
    </html>

   

    # urls.py

urlpatterns = patterns('',
    (r'^search‐form/$', views.search_form),
    (r'^search/$', views.search),

   

    在view的search方法中获取表单提交的值:

    # views.py

def search(request):
        if 'q' in request.GET:
            message = 'You searched for: %r' % request.GET['q']
        else:
            message = 'You submitted an empty form.'
        return HttpResponse(message)

     

    改进表单:

    1、填写错误应不做表单跳转;

    2、数据合法性判断在客户端做;

    

    针对上面可改进如下:

    #view.py   

def search(request):
        if 'q' in request.GET:
            q = request.GET['q']
            if not q:
                error = 'xx不能为空'
            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',
            {'error': error}

    #search-form.html   

<html>
    <head>
    <title>Search</title>
    <script>
    function check(){
        value_username=document.getElementById("id_username").value;
        if(value_username.trim().length<1){
            alert("用户名不能为空!");
        }
    }
    </script>
    </head>
    <body>
    { if error %}
    <p style="color: red;">{{error}}</p>
    {% endif %}
    <form action="/search/" method="get">
    <input type="text" name="q">
    <input type="submit" value="Search" onClick="check()">
    </form>
    </body>
    </html>

    

    下面看看post传值:

    

    相应的改成

if request.method == 'POST':
        if not request.POST.get('subject', ''):
            errors = '数据不能为空'

   

    

    以上例子都是用原生html写表单的,django因此自己封装了一套表单模型,来看看:

    

    Django带有一个form库,称为django.forms,这个库可以处理我们本章所提到的包括HTML表单显示以及验证。

   

from django import forms

    class ContactForm(forms.Form):
        subject = forms.CharField()
        email = forms.EmailField(required=False)
        message = forms.CharField()

    

    python解释器会解析为

<tr><th><label for="id_subject">Subject:</label></th><td><input type="text" name="subject" id="id_subject...
    <tr><th><label for="id_email">Email:</label></th><td><input type="text" name="email" id="id_email"...
    <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message...

    

    下面我们结合今天所讲的来做个简单的用户注册例子:

    

    
我的博客其他文章列表
 

http://my.oschina.net/helu

   

    原文作者:python入门
    原文地址: https://my.oschina.net/helu/blog/164244
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞