Django中爲用戶定義了一個django.forms庫,這個庫能夠方便的進行form類的數據顯示及數據驗證,省去了不少用戶的代碼。django.forms庫用起來也方便,只須要在HTML文件中須要增長<form>tag時,定義相應的Form類就能夠。在如下的實例中,咱們最終的頁面上只有一個<form> tag, 因此咱們只須要定義一個Form類便可。Django 社區的慣例是把Form類單獨放在一個forms.py文件中,咱們最好也遵循這個規則。建立disk\forms.py文件,並寫入html
新建一個項目django
from django.db import models class Depart(models.Model): caption = models.CharField(max_length=32) def __str__(self): return self.caption class Role(models.Model): title = models.CharField(max_length=32) def __str__(self): return self.title class User(models.Model): name = models.CharField(verbose_name='姓名',max_length=32) depart = models.ForeignKey(verbose_name='部門',to='Depart',on_delete=models.CASCADE) gender_choices = ( (1,'男'), (2,'女'), ) gender = models.IntegerField(verbose_name='性別',choices=gender_choices,default=1) roles = models.ManyToManyField(verbose_name='角色',to='Role')
1 from django.shortcuts import render,redirect 2 from app01 import models 3 4 def user_list(request): 5 user_queryset = models.User.objects.all() 6 return render(request,'user_list.html',{'user_queryset':user_queryset}) 7 8 from django import forms 9 class UserForm(forms.ModelForm): 10 class Meta: 11 model = models.User 12 fields = '__all__' 13 # fields = '__all__' 14 # widgets = { 15 # 'name':forms.TextInput(attrs={'class':'form-control'}), 16 # 'depart':forms.Select(attrs={'class':'form-control'}), 17 # 'gender':forms.Select(attrs={'class':'form-control'}), 18 # 'roles':forms.SelectMultiple(attrs={'class':'form-control'}), 19 # } 20 error_messages = { 21 'name':{ 22 'required':'用戶名不能爲空' 23 } 24 } 25 26 27 def user_add(request): 28 if request.method == "GET": 29 form = UserForm() 30 else: 31 form = UserForm(request.POST) 32 if form.is_valid(): 33 print('經過驗證') 34 form.save() 35 return redirect('/user/list/') 36 return render(request, 'user_add.html', {'form': form})
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^user/list/$',views.user_list), url(r'^user/add/$',views.user_add), ]