Python 系列(21) django 表单

Posted on Posted in python

django 的表单

普通的html表单做法

mydjango/urls.py

  1. from django.conf.urls import url  
  2. from django.contrib import admin  
  3. from app01 import views  
  4.   
  5. urlpatterns = [  
  6.     url(r'^admin/', admin.site.urls),  
  7.     url(r'^$', views.index), # 增加一个默认的路由  
  8.     url(r'^add_book/', views.new_book),  
  9. ]  

app01/views.py

  1. from django.shortcuts import render, HttpResponse, render_to_response  
  2. from . import models # 导入models  
  3.   
  4. def new_book(request):  
  5.         books = models.Book.objects.all()  
  6.         authors = models.Author.objects.all()  
  7.         publisher = models.Publisher.objects.all()  
  8.         if request.method == "POST" and request.POST:  
  9.                 print(request.POST)  
  10.                 book = request.POST.get('book_name') # get方法只能取最后一条  
  11.                 publisher = request.POST.get('publisher')  
  12.                 publisher_date = request.POST.get('publisher_date')  
  13.                 authors = request.POST.getlist('authors') # 取多条  
  14.                 new = models.Book(name=book,publisher_id=publisher,publisher_date=publisher_date)  
  15.                 new.save()  
  16.                 new.author.add(*authors) # 这个authors是个列表  
  17.                 return HttpResponse("<h1>书:%s添加成功</h1>" % book)  
  18.         return render(request,'add_book.html',{"books":books,"authors":authors,"publisher":publisher})  

templates/add_book.html

  1. <!DOCTYPE HTML>  
  2. <html lang="zh">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Add Book</title>  
  6. </head>  
  7.   
  8. <body>  
  9. 已有存书:<br />  
  10. {% for book in books %}  
  11.     <li>{{ book.name}}</li>  
  12. {% endfor%}  
  13. <hr>  
  14. 创建新书籍:<br />  
  15. <form action="/add_book/" method="post">{% csrf_token %}  
  16. 书名:<input type="text" name="book_name">  
  17. <input type="submit" value="创建新书">  
  18. 出版社:  
  19. <select name="publisher">  
  20.     {% for i in publisher %}  
  21.         <option value="{{ i.id }}">{{ i.name }}</option>  
  22.     {% endfor %}  
  23. </select>  
  24. 出版日期:<input type="datetime" value="2017-03-29" name ="publisher_date">  
  25. 作者:  
  26. <select name="authors" multiple="multiple">  
  27.     {% for author in authors %}  
  28.         <option value="{{ author.id }}">{{ author.name }}</option>  
  29.     {% endfor %}  
  30. </select>  
  31. </form>  
  32. </body>  
  33. </html>  

django form表单

app01/form.py

  1. from django import forms  
  2.   
  3. class BookForm(forms.Form):  
  4.     name = forms.CharField(max_length=64)  
  5.     publisher_id = forms.IntegerField(widget=forms.Select)  
  6.     #publisher_date = forms.DateField(widget=forms.SelectDateWidget)  
  7.     publisher_date = forms.DateField()  

mydjango/urls.py

  1. url(r'^book_form/', views.book_form),  

app01/views.py

  1. # encoding:utf-8  
  2. from django.shortcuts import render, HttpResponse, render_to_response  
  3. from . import models  
  4. from . import form  
  5.   
  6. def book_form(request):  
  7.         books = form.BookForm()  
  8.         publisher_list = models.Publisher.objects.all()  
  9.   
  10.         if request.method == "POST" and request.POST:  
  11.                 forms = form.BookForm(request.POST)  
  12.                 if forms.is_valid(): # 验证数据的合法性  
  13.                         print('forms ok')  
  14.                         print('data:', forms.cleaned_data) # 拿到所有的post数据  
  15.                         form_data = forms.cleaned_data  
  16.                         models.Book.objects.create(**form_data)  
  17.                         return HttpResponse('book add ok')  
  18.                 else:  
  19.                         print(forms.errors)  
  20.         return render(request, 'book_forms.html',{'books':books,'publisher':publisher_list})  

templates/book_forms.html

  1. <html>  
  2. <head>  
  3. <meta charset="utf-8">  
  4. <title>book_form</title>  
  5. </head>  
  6.   
  7. <body>  
  8. {# {{ books }} #}  
  9. {# book:{{ books.name }} #}  
  10.   
  11. <form action="/book_form/" method="post">{% csrf_token %}  
  12.     书名:{{ books.name }}  
  13.     <select name ="publisher_id">  
  14.         {% for i in publisher %}  
  15.             <option value="{{ i.id }}">{{ i.name }}</option>  
  16.         {% endfor %}  
  17.     </select >  
  18.     出版日期:{{ books.publisher_date }}  
  19.     <input type="submit" value="创建图书">  
  20. </body>  
  21. </html>  

使用原类表单

mydjango/urls.py

  1. url(r'^model_form/', views.book_model_form),  

app01/form.py

  1. from django import forms  
  2. from . import models  
  3.   
  4. class BookModelForm(forms.ModelForm):  
  5.     class Meta:  
  6.         model = models.Book  
  7.         exclude = ()  
  8.         widget = {  
  9.             'name':forms.TextInput(attrs={'class':'form-control'}),  

}

app01/views.py

  1. # encoding:utf-8  
  2. from django.shortcuts import render, HttpResponse, render_to_response  
  3. from . import models  
  4. from . import form  
  5.   
  6. def book_model_form(request):  
  7.     form1 = form.BookModelForm  
  8.     if request.method == "POST" and request.POST:  
  9.         print(request.POST)   
  10.         form1 = form.BookModelForm(request.POST)  
  11.         if form1.is_valid():  
  12.             print('ok')  
  13.             form1.save()  
  14.             return HttpResponse('new book add ok')  
  15.         else:  
  16.             print('shibai==================')  
  17.     else:  
  18.         print('post error')  
  19.     return render(request,'book_model_form.html',{'model_form':form1})  

templates/book_model_form.html

  1. <html>  
  2. <head>  
  3. <meta charset="utf-8">  
  4. <title>book_form</title>  
  5. </head>  
  6.   
  7. <body>  
  8. {#{{ model_form }}#}  
  9.   
  10. <form action="/model_form/" method="post">{% csrf_token %}  
  11. {% for i in model_form %}  
  12.     <div style="padding:20px;">{{ i.name }}:{{ i }}</div>  
  13. {% endfor %}  
  14. <input type="submit" value="创建">  
  15. </form>  
  16. </body>  
  17. </html>  
» 转载请注明来源:呢喃 » Python 系列(21) django 表单

Leave a Reply

Your email address will not be published. Required fields are marked *

8 − seven =