python3.4 + Django1.7.7 表单的一些问题

上面是没有调用cleaned_data的提交结果,可见模版直接把form里面的整个标签都接收过来了

下面是调用cleaned_data 的结果

django 的表单,提交上来之后是这样的:

#coding: gb2312
from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=10,label='subject')#设置最大长度为10
    email = forms.EmailField(required=False,label='Email')#非必要字段
    message = forms.CharField(widget=forms.Textarea,label='message')#指定form中组件的类型

    #自定义校验规则,该方法在校验时被系统自动调用,次序在“字段约束”之后
    def clean_message(self):
        message = self.cleaned_data['message']#能到此处说明数据符合“字段约束”要求
        num_words = len(message.split())
        if num_words < 1:#单词个数
            raise forms.ValidationError("your word is too short!")
        return message

比如下面这句:

email = forms.EmailField(required=False,label=‘Email‘)#非必要字段

其实可以作为非必要字段,required=False

由于调用form.cleaned_data#只有各个字段都符合要求时才有对应的cleaned_data,之前好像必须得:

if form.is_valid():#说明各个字段的输入值都符合要求

所以上述字段required=False,在测试东西或者自己写东西,等安全性不高的场合就比较必要了

#coding: gb2312
from django.http import HttpResponse
import datetime,calendar
import time
from django.http import HttpResponse
from django.template import Context
from django.template.loader import get_template
from django.http import HttpResponse, Http404
from django.contrib.auth.models import User
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.contrib.auth import logout
from django.template import RequestContext
from django.core.urlresolvers import reverse
from django.shortcuts import redirect

#from django import form

from django.shortcuts import render
from .forms import ContactForm
#from django.shortcuts import render_to_response
#from django_manage_app.forms import ContactForm

def current_datetime(request):
    now = time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time()))
    html = '<html><body>It is now %s.</body></html>' %now
    return HttpResponse(html)

def show_readme(request):
    if request.method == 'POST':#提交请求时才会访问这一段,首次访问页面时不会执行
        form = ContactForm(request.POST)

    print (form['subject'])
    print (form['email'])
    print (form['message'])
    print ("show ----------------")

    #“首次访问”和“提交的信息不符合要求”时被调用
    return render_to_response('show.html', {'form': form})

def contact_author(request):
    if request.method == 'POST':#提交请求时才会访问这一段,首次访问页面时不会执行
        form = ContactForm(request.POST)
        if form.is_valid():#说明各个字段的输入值都符合要求
            cd = form.cleaned_data#只有各个字段都符合要求时才有对应的cleaned_data
            #print (form.cleaned_data())

            print (cd['subject'])
            print (cd['email'])
            print (cd['message'])
            #return render_to_response('contact_author.html', {'form': form})
            #return redirect(reverse('','show_readme.html'))
            #return HttpResponseRedirect('/thanks/')
            return render_to_response('show_readme.html', {'form': cd})
            #此处逻辑应该是先生成新的预览页面,再保存为txt

            #return response

    else:#首次访问该url时没有post任何表单
        form = ContactForm()#第一次生成的form里面内容的格式
        print (form)
        print (form.is_valid())

    #“首次访问”和“提交的信息不符合要求”时被调用
    return render_to_response('contact_author.html', {'form': form})
    #return render_to_response('show.html', {'form': form})

def thanks(request):

    return render_to_response('thanks.html')

def download_file(request):
    #from django.http import HttpResponse
    ## CSV
    #import csv
    #response = HttpResponse(mimetype='text/csv')
    #response['Content-Disposition'] = 'attachment; filename=my.csv'
    #writer = csv.writer(response)
    #writer.writerow(['First row', 'Foo', 'Bar', 'Baz'])
    #writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"])  

    # Text file
    response = HttpResponse(content_type='text/plain')
    response['Content-Disposition'] = 'attachment; filename=my.txt'
    response.write("aa\n")
    response.write("bb")   

    # PDF file
    #http://code.djangoproject.com/svn/django/branches/0.95-bugfixes/docs/outputting_pdf.txt
    #from reportlab.pdfgen import canvas  #need pip ind
    #response = HttpResponse()#)mimetype='application/pdf')
    #response['Content-Disposition'] = 'attachment; filename=somefilename.pdf'
    #p = canvas.Canvas(response)
    #p.drawString(100, 100, "Hello world.")
    #p.showPage()
    #p.save()  

    #response = HttpResponse()
    fout=open("mysite//test.txt","wt")
    str = "hello world"
    fout.write(str)
    fout.close()
    #response['Content-Disposition'] = 'attachment; filename=test.txt'
    data = open("mysite//test.txt", "rb").read()

    html = '<html><body>%s</body></html>' %str
    return response#HttpResponse(data, content_type="text/plain")

提交给模版的html:

<html>
<style type="text/css">

    .field{
        background-color:#BCD8F5;
    }
</style>
<head>
    <title>show readme</title>
</head>
<body>

        <!<div class="field">

             {{ form.subject }}
             {{ form.email }}
             {{ form.message }}

        <!</div>

</body>
</html>



时间: 2024-10-10 07:43:50

python3.4 + Django1.7.7 表单的一些问题的相关文章

Python3.4 + Django1.7.7 搭建简单的表单并提交

后面还有一个问题,是我把txt生成了,但是网页没有返回我还不知道,现在怎么直接返回txt并且展示出来txt 的内容,希望大牛不吝赐教 首先有一个问题 django1.7之前,这样用: HttpResponse(simplejson.dumps({"status": '200', "message":u'登录成功'}), mimetype='application/json') 没问题,但是django1,7之后就报错了,查了下问题发现应该这样用: HttpRespo

django1.11如何用post方法提交表单

django为了帮助应对跨站脚本攻击,在以POST方法提交表单时,要求将其内置的CSRF中间件添加到setting.py的中间件设置中(django.middleware.csrf.CsrfViewMiddleware,默认已添加),并且在<form>标签后添加{% csrf_token %},即表单元素变为: <form action="" method="post">{% csrf_token %} 同时,表单提交对应的视图函数也要调用R

循序渐进Python3(十三) --0-- django之form表单

django为我们提供了form表单验证功能,下面来学习一下: 武sir博客:http://www.cnblogs.com/wupeiqi/articles/5246483.html 创建了django项目之后,创建app.  配置urls: from django.conf.urls import url from django.contrib import admin from myapp01 import views urlpatterns = [ url(r'^admin/', admi

用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)

老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用. ubuntu上安装: sudo apt-get install tesseract-ocr 非常简单. 2.pytesseract和PIL(pillow) pytesseract用来在python中调用tesseract-ocr,PIL(pillow)用来加载图片,安装方法如下: pip3 in

Django初体验(一):自定义表单提交

注:本人使用的Django1.8.3版本进行测试 除了使用Django内置表单,有时往往我们需要自定义表单.对于自定义表单Post方式提交往往会带来由CSRF(跨站请求伪造)产生的错误"CSRF verification failed. Request aborted." 本篇博客只要针对"表单提交"和"Ajax提交"两种方式来解决CSRF带来的错误 一.表单提交 Template: <!DOCTYPE html> <html

【第一天】django快速开发——环境部署、表单、数据库操作、模板、文件学习

安装django 1.安装 setuptools yum install python-setuptools 2.完成之后,就可以使用 easy_install 命令安装 django easy_install django 注意:django对于pip和setuptools的版本有严格要求,如果不想那么麻烦建议直接装个python3.6 django管理命令 django-admin.py 这是django的管理命令,无论在哪个目录都可以用这个命令来对project或app做操作 最常用的命令

四、布局管理(绝对&amp;相对、水平、垂直、格栅、表单)

目录 一.绝对布局 二.盒布局 三.格栅布局 四.格栅布局跨行跨列显示 布局管理即设置窗体上各个控件的位置,对于新手来说,这是学习的难点. 布局管理根据绝对坐标是否变动分为绝对布局和相对布局两大类.采用相对布局的窗口在变大或缩小时,各控件的位置关系会保持固定比例做相应变动.而采用绝对布局的窗口变动时,空间位置不会变动. 而相对布局根据方式不同,又可以分为水平布局(QHBoxLayout).垂直布局管理(QVBoxLayout).栅格布局管理(QGridLayout).表单布局管理(QFormLa

django,form表单,数据库增删改查

Django 02 复习:  Django下载:   在命令行输入:    pip3 install django==1.11.11    在这里不要用最新的3.7,推荐使用3.6/3.5/3.4    判断下载成功:     django-admin    创建django项目:     django-admin startproject 项目名     会创建跟项目同名的文件夹     settings.py 暴露给用户可配置的配置文件     urls.py     路由与视图函数对应文件

Django表单上传

任务描述:实现表单提交(上传文件) 1.项目目录: 2.源代码: regist.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>regist</title> </head> <body> <h3>regist</h3> <hr> <