专栏首页流川疯编写程序的艺术python3.4 + Django1.7.7 表单的一些问题

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>

Django本身内建有一些app,例如注释系统和自动管理界面。 app的一个关键点是它们是很容易移植到其他project和被多个project复用。

对于如何架构Django代码并没有快速成套的规则。 如果你只是建造一个简单的Web站点,那么可能你只需要一个app就可以了; 但如果是一个包含许多不相关的模块的复杂的网站, 例如电子商务和社区之类的站点,那么你可能需要把这些模块划分成不同的app,以便以后复用。

 数据库模型有有效性验证

C:\Python27\Lib\site-packages\Django-1.7.1-py2.7.egg\django\bin\mysite>python manage.py sqlall books

CommandError: App 'books' has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations.

此时需要输入如下部分即可

C:\Python27\Lib\site-packages\Django-1.7.1-py2.7.egg\django\bin\mysite>python manage.py makemigrations

C:\Python27\Lib\site-packages\Django-1.7.1-py2.7.egg\django\bin\mysite>python manage.py migrate

若上述问题依旧: Since there is still a bit of backwards compatibility with django 1.6 and below you can still use the sql commands from django-admin. However, you have to delete the migrations folder first.

To get the create statements you need to remove the migrations folder 直接删除books app下面的migrations文件夹

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

    后面还有一个问题,是我把txt生成了,但是网页没有返回我还不知道,现在怎么直接返回txt并且展示出来txt 的内容,希望大牛不吝赐教

    用户1539362
  • python +Django 搭建web开发环境初步,显示当前时间

    网上很多关于django跟python 开发的资料,这块我正在实习准备用这个两个合起来搞一个基于web 的东西出来现在开始学习,写点东西记录一下心得。

    用户1539362
  • 大数据ETL实践探索(3)---- 大数据ETL利器之pyspark

    本系列文章主要针对ETL大数据处理这一典型场景,基于python语言使用Oracle、aws、Elastic search 、Spark 相关组件进行一些基本的...

    用户1539362
  • Python3.4 + Django1.7.7 搭建简单的表单并提交

    后面还有一个问题,是我把txt生成了,但是网页没有返回我还不知道,现在怎么直接返回txt并且展示出来txt 的内容,希望大牛不吝赐教

    用户1539362
  • Django2.1集成xadmin管理后台所遇到的错误解决办法

    django默认是有一个admin的后台管理模块,但是丑,功能也不齐全,但是大神给我们已经集成好了xadmin后台,我们拿来用即可,但是呢,django已经升级...

    菲宇
  • Django 教程 --- Django CRUD

    Django是一个基于Python的Web框架,它使您可以快速创建Web应用程序,而不会遇到通常在其他框架中会发现的所有安装或依赖性问题。Django基于MVT...

    公众号---志学Python
  • 基于flask的网页聊天室(二)

    接上一次的内容继续完善,今天完成的内容不是很多,只是简单的用户注册登录,内容具体如下

    py3study
  • ultraedit:wordfiles下载页面塈增加对(dos)bat脚本的高亮(syntax highlighting)显示

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • 技术 | Vue2.0 实践,顺手撸了一个小项目

    传送门:https://github.com/icepy/index-oa-template,或阅读原文。

    icepy
  • Python web开发:Flask系列之表单操作

    Flask是一个基于Python开发,依赖jinja2模板和Werkzeug WSGI服务的一个微型框架。

    double

扫码关注云+社区

领取腾讯云代金券