django学习之表单

1.django表单1
#forms.py
from django import forms

class  MessageForms(forms.Form):
    title=forms.CharField(max_length=200,min_length=3,label="标题",error_messages={"min_length":"最好不能小于3个字符","max_length":"最大不能超过200字符"})
    content=forms.CharField(widget=forms.Textarea,label="内容",error_messages={"required":"必须要填这个字段"})
    email=forms.EmailField(label="邮箱",error_messages={"required":"必须要填写邮箱地址"})
    reply=forms.BooleanField(required=False,label="回复")
#urls.py
from django.urls import path
from .views import MessagesformsView

urlpatterns=[
    path("",MessagesformsView.as_view()),
]
#views.py
from django.shortcuts import render
from .forms import MessageForms
from django.views.generic import View
from django.http import HttpResponse
from django.forms.utils import ErrorDict
# Create your views here.
class MessagesformsView(View):
    def get(self,request):
        form = MessageForms()
        return render(request,'forms.html',context={"forms":form})
    def post(self,request):
        print("正在提交")
        form = MessageForms(request.POST)
        if form.is_valid():
            title = form.cleaned_data.get('title')
            content = form.cleaned_data.get('content')
            email = form.cleaned_data.get('email')
            reply = form.cleaned_data.get('reply')
            print('='*30)
            print(title)
            print(content)
            print(email)
            print(reply)
            print('='*30)
            return HttpResponse('success')
        else:
            print(form.errors.get_json_data())
            return HttpResponse('fail')
#forms.html
<form action="" method="post">
    <table>
        {{ forms.as_table }}
        <tr>
            <td></td>
            <td><input type="submit" value="提交"></td>
        </tr>
    </table>
</form>

在这里插入图片描述

2.djano表单2
#views.py
from django.shortcuts import render
from .forms import Myform
from django.views.generic import View
from django.http import HttpResponse

class From1View(View):
    def get(self,request):
        return render(request,'form2.html')
    def post(self,request):
        form=Myform(request.POST)
        if form.is_valid():
            url=form.cleaned_data.get("my_website")
            return HttpResponse("success")
        else:
            print(form.errors.get_json_data())
            return HttpResponse("fail")
#urls.py
from django.urls import path
from .views import From1View

urlpatterns=[
    path("form1/",From1View.as_view()),
]

#forms.py
from django import forms
class Myform(forms.Form):
    my_website=forms.URLField()
#form2.html
<form action="" method="post">
    <input type="text" name="my_website">
    <input type="submit" value="提交">
</form>

在这里插入图片描述

3.验证合法的手机号
#views.py
class From1View(View):
    def get(self,request):
        return render(request,'form2.html')
    def post(self,request):
        form=Myform(request.POST)
        if form.is_valid():
            url=form.cleaned_data.get("telephone")
            return HttpResponse("success")
        else:
            print(form.errors.get_json_data())
            return HttpResponse("fail")
#urls.py
from django.urls import path
from .views import MessagesformsView,From1View

urlpatterns=[
    path("form1/",From1View.as_view()),
]

#forms.py
from django import forms
from django.core import validators
class Myform(forms.Form):
    telephone = forms.CharField(validators=[validators.RegexValidator(r'1[345678]\d{9}',message='请输入正确格式的手机号码!')])
#forms2.html
<form action="" method="post">
    <input type="text" name="telephone">
    <input type="submit" value="提交">
</form>
4.在注册时查看是否已经注册的功能
#models.py
from django.db import models

class User(models.Model):
    username = models.CharField(max_length=100)
    telephone = models.CharField(max_length=11)
#views.py
class RegisterView(View):
    def get(self,request):
        return render(request,'register.html')

    def post(self,request):
        form = RegisterForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            telephone = form.cleaned_data.get('telephone')
            User.objects.create(username=username,telephone=telephone)
            return HttpResponse('注册成功!')
        else:
            print(form.get_errors())
            return HttpResponse('注册失败!')
#urls.py
 path('register/', views.RegisterView.as_view()),
#forms.py
class RegisterForm(BaseForm):
    username = forms.CharField(max_length=100)
    telephone = forms.CharField(validators=[validators.RegexValidator(r'1[345678]\d{9}',message='请输入正确格式的手机号码!')])
    pwd1 = forms.CharField(max_length=16,min_length=6)
    pwd2 = forms.CharField(max_length=16,min_length=6)

    def clean_telephone(self):
    #只验证一个数值
        telephone = self.cleaned_data.get('telephone')
        exists = User.objects.filter(telephone=telephone).exists()
        if exists:
            raise forms.ValidationError(message='%s已经被注册!'%telephone)
        # 如果验证没有问题,一定要记得把telephone返回回去
        return telephone
        
    def clean(self):
        # 如果来到了clean方法,说明之前每一个字段都验证成功了,这里写是否相等的逻辑,这里一定是cleaned_data,调用get方法
        cleaned_data = super().clean()
        pwd1 = cleaned_data.get('pwd1')
        pwd2 = cleaned_data.get('pwd2')
        if pwd1 != pwd2:
            raise forms.ValidationError(message='两次密码输入不一致!')
        return cleaned_data
<form action="" method="post">
    <table>
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>手机号码:</td>
            <td><input type="text" name="telephone"></td>
        </tr>
        <tr>
            <td>密码:</td>
            <td><input type="password" name="pwd1"></td>
        </tr>
        <tr>
            <td>重复密码:</td>
            <td><input type="password" name="pwd2"></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="注册"></td>
        </tr>
    </table>
</form>
5.Modelform
#forms.py
#encoding: utf-8
from django import forms
from .models import Book,User

class AddBookForm(forms.ModelForm):
    def clean_page(self):
        page = self.cleaned_data.get('page')
        if page > 100:
            raise forms.ValidationError('页数不能大于100!')
        return page

    class Meta:
        model = Book
        # fields和exclude必须定义一个
        fields = "__all__"
        # fields = ['title','page']
        # exclude = ['price']
        error_messages = {
            'page':{
                'required': '请传入page参数!',
                'invalid': '请输入一个可用的page参数!'
            },
            'title': {
                'max_length': 'title不能超过100个字符!'
            },
            'price': {
                'max_value': '图书价格不能超过100元!'
            }
        }

class RegisterForm(forms.ModelForm):
    pwd1 = forms.CharField(max_length=16,min_length=6)
    pwd2 = forms.CharField(max_length=16,min_length=6)
    def clean(self):
        cleaned_data = super().clean()
        pwd1 = cleaned_data.get('pwd1')
        pwd2 = cleaned_data.get('pwd2')
        if pwd1 != pwd2:
            raise forms.ValidationError('两次密码输入不一致!')
        return cleaned_data

    class Meta:
        model = User
        exclude = ['password']

#models.py
from django.db import models
from django.core import validators

class Book(models.Model):
    title = models.CharField(max_length=100)
    page = models.IntegerField()
    price = models.FloatField(validators=[validators.MaxValueValidator(limit_value=1000)])


class User(models.Model):
    username = models.CharField(max_length=100)
    password = models.CharField(max_length=16)
    telephone = models.CharField(max_length=11,validators=[validators.RegexValidator(r'1[345678]\d{9}')])

from django.shortcuts import render
from django.http import HttpResponse
from .forms import AddBookForm,RegisterForm
from django.views.decorators.http import require_POST

def index(request):
    return HttpResponse('index')

def add_book(request):
    form = AddBookForm(request.POST)
    if form.is_valid():
        # title = form.cleaned_data.get('title')
        # page = form.cleaned_data.get("page")
        # price = form.cleaned_data.get("price")
        # print('title:%s'%title)
        # print('page:%s'%page)
        # print('price:%s'%price)
        form.save()
        return HttpResponse('success')
    else:
        print(form.errors.get_json_data())
        return HttpResponse('FAIL')

@require_POST
def register(request):
    form = RegisterForm(request.POST)
    if form.is_valid():
        user = form.save(commit=False)
        user.password = form.cleaned_data.get('pwd1')
        user.save()
        return HttpResponse('success')
    else:
        return HttpResponse('fail')

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值