zoukankan      html  css  js  c++  java
  • 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
    ")  
        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:Python27Libsite-packagesDjango-1.7.1-py2.7.eggdjangoinmysite>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:Python27Libsite-packagesDjango-1.7.1-py2.7.eggdjangoinmysite>python manage.py makemigrations

    C:Python27Libsite-packagesDjango-1.7.1-py2.7.eggdjangoinmysite>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文件夹


    
    
  • 相关阅读:
    AIMS 2013中的性能报告工具不能运行的解决办法
    读懂AIMS 2013中的性能分析报告
    在线研讨会网络视频讲座 方案设计利器Autodesk Infrastructure Modeler 2013
    Using New Profiling API to Analyze Performance of AIMS 2013
    Map 3D 2013 新功能和新API WebCast视频下载
    为Autodesk Infrastructure Map Server(AIMS) Mobile Viewer创建自定义控件
    ADN新开了云计算Cloud和移动计算Mobile相关技术的博客
    JavaScript修改css样式style
    文本编辑神器awk
    jquery 开发总结1
  • 原文地址:https://www.cnblogs.com/wangyaning/p/7854006.html
Copyright © 2011-2022 走看看