import re
from django import forms
from django.contrib.auth import authenticate, login
from accounts.models import User, UserAddress
from utils.verify import VerifyCode
class UserLoginForm(forms.Form):
'''用户登录表单'''
username = forms.CharField(label='用户名', max_length=64)
password = forms.CharField(label='密码', max_length=64, widget=forms.PasswordInput,
error_messages={
'required': '请输入密码',
})
verify_code = forms.CharField(label='验证码', max_length=4, error_messages={
'required': '请输入验证码'
})
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
self.request = request
# 表单验证
# def clean_username(self):
# '''验证用户名'''
# username = self.cleaned_data['username']
# print(username)
# # 判断用户名是否为手机号码
# pattern = r'^0{0,1}1[0-9]{10}'
# if not re.search(pattern, username):
# raise forms.ValidationError('请输入正确的手机号码')
# return username
# 验证码校验
def clean_verify_code(self):
verify_code = self.cleaned_data['verify_code']
if not verify_code:
raise forms.ValidationError('请输入验证码')
client = VerifyCode(self.request)
if not client.validate_code(verify_code):
raise forms.ValidationError('您输入的验证码不正确')
def clean(self):
cleaned_data = super().clean()
print(cleaned_data)
# username = cleaned_data['username']
# 获取用户名和密码 不建议使用[]方式
username = cleaned_data.get('username', None)
password = cleaned_data.get('password', None)
if username and password:
# 验证用户名
user_list = User.objects.filter(username=username)
if user_list.count() == 0:
raise forms.ValidationError('用户名不存在')
# # 验证密码
# if not user_list.filter(password=password).exists():
# raise forms.ValidationError('密码错误')
if not authenticate(username=username, password=password):
raise forms.ValidationError('密码错误')
return cleaned_data
class UserRegisterForm(forms.Form):
'''用户注册表单'''
username = forms.CharField(label='用户名', max_length=64)
nickname = forms.CharField(label='昵称', max_length=64)
password = forms.CharField(label='密码', max_length=64, widget=forms.PasswordInput)
password_repeat = forms.CharField(label='重复密码', max_length=64, widget=forms.PasswordInput)
verify_code = forms.CharField(label='验证码', max_length=4)
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
self.request = request
def clean_username(self):
'''验证用户名是否存在'''
username = self.cleaned_data['username']
if User.objects.filter(username=username).exists():
raise forms.ValidationError('用户名已存在')
return username
# 校验密码和重复密码
def clean(self):
clean_data = super().clean()
password = clean_data.get('password', None)
password_repeat = clean_data.get('password_repeat', None)
if password and password_repeat:
if password != password_repeat:
raise forms.ValidationError('两次密码不一致')
return clean_data
def clean_verify_code(self):
verify_code = self.cleaned_data['verify_code']
if not verify_code:
raise forms.ValidationError('请输入验证码')
client = VerifyCode(self.request)
if not client.validate_code(verify_code):
raise forms.ValidationError('您输入的验证码不正确')
def register(self):
'''注册方法'''
data = self.cleaned_data
# 1. 创建用户
User.objects.create_user(username=data['username'],
password=data['password'],
level=0,
nickname=data['nickname'])
# 2. 自动登录
user = authenticate(username=data['username'], password=data['password'])
login(self.request, user)
return user
class UserAddressForm(forms.ModelForm):
'''地址的新增和修改'''
region = forms.CharField(label='大区域选项', max_length=64, required=True,
error_messages={
'required': '请选择地址',
})
def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
self.request = request
def clean_phone(self):
'''验证用户输入手机号码'''
phone = self.cleaned_data['phone']
# # 判断用户名是否为手机号码
pattern = r'^0{0,1}1[0-9]{10}'
if not re.search(pattern, phone):
raise forms.ValidationError('请输入正确的手机号码')
return phone
def clean(self):
'''验证用户地址数量 最多20个'''
clean_data = super().clean()
# 查询当前登录用户的地址数据
addr_list = UserAddress.objects.filter(is_valid=True, user=self.request.user)
if addr_list.count() >= 20:
raise forms.ValidationError('最多添加20个地址')
return clean_data
def save(self, commit=True):
obj = super().save(commit=False)
region = self.cleaned_data['region']
(province, city, area) = region.split(' ')
obj.province = province
obj.city = city
obj.area = area
obj.user = self.request.user
# 修改的时候 如果已经有默认地址,当前已勾选 需要将之前的设置为非默认地址
if self.cleaned_data['is_default']:
UserAddress.objects.filter(is_valid=True, user=self.request.user,
is_default=True).update(is_default=False)
obj.save()
class Meta:
model = UserAddress
fields = ['address', 'username', 'phone', 'is_default']
widgets = {
'is_default': forms.CheckboxInput(attrs={
'class': 'weui-switch'
})
}
error_messages = {
'username':{
'required': '请输入收件人姓名',
},
'phone': {
'required': '请输入输入手机号',
},
'address': {
'required': '请输入详细地址'
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
使用django开发的积分商城项目
共276个文件
jpg:95个
py:64个
png:45个
需积分: 0 1 下载量 106 浏览量
2024-03-10
13:31:46
上传
评论
收藏 18.3MB ZIP 举报
温馨提示
使用django开发的积分商城项目 经调试可运行 使用django开发的积分商城项目 经调试可运行 使用django开发的积分商城项目 经调试可运行
资源推荐
资源详情
资源评论
收起资源包目录
使用django开发的积分商城项目 (276个子文件)
config 314B
jquery-weui.css 68KB
jquery-weui.min.css 55KB
style.css 26KB
demos.css 637B
description 73B
exclude 240B
tophovertree.gif 579B
.gitignore 2KB
.gitignore 190B
.gitignore 190B
HEAD 193B
HEAD 193B
HEAD 32B
HEAD 23B
prod_classify.html 49KB
order_list.html 33KB
product_detail.html 25KB
shopcart.html 10KB
index.html 9KB
mine.html 8KB
order_info.html 6KB
prod_collect.html 5KB
cart.html 5KB
register.html 4KB
address_edit.html 4KB
address_edit.html 4KB
product_list.html 3KB
login.html 3KB
address_list.html 3KB
pwd_change.html 3KB
news_list.html 2KB
base.html 2KB
address_list.html 1KB
footer.html 1005B
news_info.html 851B
product_load_list.html 746B
pack-ef43ec1f6dd188c401132e2c8cc968843a22c061.idx 8KB
django-mall-points-mall.iml 1KB
django_mall.iml 1KB
index 27KB
e11.jpg 719KB
e12.jpg 716KB
f11.jpg 642KB
c11.jpg 444KB
d14.jpg 414KB
d12.jpg 374KB
c13.jpg 358KB
d13.jpg 292KB
c14.jpg 287KB
d11.jpg 232KB
xq1.jpg 216KB
xq1.jpg 216KB
f12.jpg 186KB
c12.jpg 181KB
b15.jpg 179KB
b11.jpg 171KB
xq2.jpg 164KB
xq2.jpg 164KB
b13.jpg 162KB
ruzhuliucheng.jpg 145KB
xq8.jpg 136KB
xq8.jpg 136KB
b12.jpg 134KB
xq9.jpg 132KB
xq9.jpg 132KB
xq4.jpg 131KB
xq4.jpg 131KB
xq5.jpg 118KB
xq5.jpg 118KB
xq3.jpg 115KB
xq3.jpg 115KB
xq6.jpg 105KB
xq6.jpg 105KB
g13.jpg 104KB
g14.jpg 88KB
xq7.jpg 86KB
xq7.jpg 86KB
b14.jpg 74KB
g12.jpg 68KB
f1.jpg 65KB
zhutu01.jpg 64KB
zhutu01.jpg 64KB
zhutu01.jpg 64KB
e1.jpg 55KB
main.jpg 51KB
pro1.jpg 50KB
e0.jpg 48KB
e0.jpg 48KB
zhutu02.jpg 43KB
zhutu02.jpg 43KB
ban3.jpg 43KB
g11.jpg 42KB
ban1.jpg 42KB
ban2.jpg 41KB
c0.jpg 41KB
g0.jpg 37KB
g0.jpg 37KB
f0.jpg 35KB
f0.jpg 35KB
共 276 条
- 1
- 2
- 3
资源评论
m0_64063310
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功