1.django表单1
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="回复")
from django.urls import path
from .views import MessagesformsView
urlpatterns=[
path("",MessagesformsView.as_view()),
]
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
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')
<form action="" method="post">
<table>
{{ forms.as_table }}
<tr>
<td></td>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
2.djano表单2
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")
from django.urls import path
from .views import From1View
urlpatterns=[
path("form1/",From1View.as_view()),
]
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.验证合法的手机号
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")
from django.urls import path
from .views import MessagesformsView,From1View
urlpatterns=[
path("form1/",From1View.as_view()),
]
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.在注册时查看是否已经注册的功能
from django.db import models
class User(models.Model):
username = models.CharField(max_length=100)
telephone = models.CharField(max_length=11)
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('注册失败!')
path('register/', views.RegisterView.as_view()),
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)
return telephone
def clean(self):
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
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 = "__all__"
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']
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():
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')