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(7)——Django之表单)