python问题录入表单_python3.4 + Django1.7.7 表单的一些问题

dcf72a99cf87a74b80af774e099ce586.png

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

下面是调用cleaned_data 的结果

6b645b40dbd501b04f28f689a2b37a65.png

f38a9cbfead37221350c493cefc7065d.png

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 = '

It is now %s.' %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 = '

%s' %str

return response#HttpResponse(data, content_type="text/plain")

提交给模版的html:

.field{

background-color:#BCD8F5;

}

show readme

{

{ form.subject }}

{

{ form.email }}

{

{ form.message }}

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文件夹





本文同步分享在 博客“shiter”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值