# forms.py # encoding=utf-8 from django import forms from django.core.exceptions import ValidationError from users.models import Users class UserRegisterForms(forms.Form): # 校验字段名与前端传来的保持一致 user_name = forms.CharField() email = forms.CharField() pwd = forms.CharField(min_length=6, max_length=15) cpwd = forms.CharField(min_length=6, max_length=15) def clean_user_name(self): name = self.data.get('user_name') if not name: raise ValidationError('username can not be none') return name def clean_cpwd(self): repwd = self.data.get('cpwd') pwd = self.data.get('pwd') if repwd != pwd: raise ValidationError('password must equal re_password') return repwd def save(self): name = self.cleaned_data.get('user_name') email = self.cleaned_data.get('email') user = Users.objects.create(username=name, email=email, is_active=1, is_staff=0) return user # views.py user_register_form = UserRegisterForms(request.POST) if not user_register_form.is_valid(): return JsonResponse(context) email = user_register_form.cleaned_data.get('email') user = None try: user = user_register_form.save() pwd = user_register_form.cleaned_data.get('pwd') user.set_password(pwd) user.save() except Exception as e: logger.error(e) context['msg'] = 'user create failed' return JsonResponse(context) """ 在用到form表单时使用 """ # models.py中 """ book n: n author book 1: n publisher """ from django.db import models class Author(models.Model): name = models.CharField(max_length=30, verbose_name='名称') class Publisher(models.Model): name = models.CharField(max_length=30, verbose_name='名称') class Book(models.Model): name = models.CharField(max_length=30, verbose_name='书籍名称') authors = models.ForeignKey('Author', verbose_name='出版社') publishers = models.ManyToManyField(to=Publisher, verbose_name='作者') # *.py中定义modelform class BookForm(ModelForm): class Meta: model = Book # 对应的Model中的类 fields = "__all__" # 字段,如果是__all__,就是表示列出所有的字段 exclude = None # 排除的字段 help_texts = None # 帮助提示信息 # error_messages用法: error_messages = { 'name': {'required': "用户名不能为空", }, 'age': {'required': "年龄不能为空", }, } from django.forms import widgets as wid # 因为重名,所以起个别名 widgets = { #把name对应的input框渲染为Textarea "name": wid.Textarea(attrs={"class": "c1", "id": "name"}) #将拥有class='c1'和id=name的属性 } labels = {"name": "用户名"} # labels 自定义在前端显示的名字 # models.py from django.forms import ModelForm class Book(models.Model): bid = models.CharField(max_length=25, verbose_name='图书编号', primary_key=True) name = models.CharField(max_length=25, verbose_name='图书名称', null=False) price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='定价') stock = models.IntegerField(verbose_name='库存') lend = models.IntegerField(default=0, verbose_name='借出数量', blank=True) image = models.ImageField(upload_to='images') publisher = models.ManyToManyField(to='Publisher') author = models.ManyToManyField(to='Author') category = models.ManyToManyField(to='Category') class Meta: db_table = 'db_book' verbose_name = '图书表' verbose_name_plural = verbose_name def __str__(self): return self.name class BookForm(ModelForm): class Meta: model = Book # Book要先定义出来 fields = '__all__' labels = { 'publisher': '出版社', 'image': '封面图片', 'category': '分类', 'author': '作者' } """ def clean_bid(self): # 单独校验某个字段 clean_字段名 # print self.cleaned_data, type(self.cleaned_data) bid = self.cleaned_data.get('bid') if (bid, ) in Book.objects.values_list('bid'): raise ValueError('bid已存在') return bid""" # views.py forms = BookForm(request.POST, request.FILES, instance=book) # 修改book实例, forms = BookForm(instance=book) #返回前端渲染 return render(request, 'books.html', {'forms': 'forms'}) instance = BookForm(request.POST) #用于校验post发送的数据 if instance.is_valid(): #检验数据 data = instance.cleaned_data #校验通过的数据 instance.errors #错误信息 class BookEditView(View): def get(self, request, bid): try: book = Book.objects.get(bid=bid) except Book.DoesNotExist: return HttpResponse("book_id does not exist") book_form = BookForm(instance=book) # 返回form return render(request, 'book_edit.html', {"book_form": book_form}) def post(self, request): forms = BookForm(request.POST, request.FILES) if forms.is_valid(): forms.save() return render(request, 'book_edit.html', {"book_form": forms}) def put(self, request, bid): try: book = Book.objects.get(bid=bid) except Book.DoesNotExist: return HttpResponse("book_id does not exist") book_form = BookForm(request.POST, request.FILES, instance=book) # 用前端数据修改instance if book_form.is_valid(): # 校验 book_form.save() # 入库 return redirect(reverse('backstage:book_list'))
浙公网安备 33010602011771号