Django--CRM
一 . 什么是CRM
CRM就是客户关系管理系统(customer relationship management)
二 . 用户登录
# models.py文件 class UserProfile(models.Model): username = models.EmailField(max_length=255, unique=True, ) password = models.CharField(verbose_name='密码', max_length=128, ) name = models.CharField('名字', max_length=32) department = models.ForeignKey('Department', default=None, blank=True, null=True, verbose_name='部门') mobile = models.CharField('手机', max_length=32, default=None, blank=True, null=True) memo = models.TextField('备注', blank=True, null=True, default=None) date_joined = models.DateTimeField(auto_now_add=True) is_active = models.BooleanField(default=True) # 管理员看他是否离职,如果离职则改为False,只有账号密码都正确并且is_active=True
可以去网站上扒好看的登录页面
步骤一(找到你想要的模型)
步骤二(查看源代码)
步骤三(找到css样式)
步骤四(在HTML文件中的body部分把路径修改一下)
步骤五(查看效果)
三 . 注册验证
# views.py文件,也可以单独在APP下建议个py文件写 from django import forms from crm import models from django.core.exceptions import ValidationError import hashlib class RegForm(forms.ModelForm): # Meta里面的内容不满足你的验证要求,可以在Meta外面写, password = forms.CharField( widget=forms.PasswordInput, label='密码', min_length=6, max_length=16, # 这个字段的报错信息也只写在这里才生效 error_messages={'min_length': '不能小于6位'} ) re_password = forms.CharField(widget=forms.PasswordInput, label='确认密码', min_length=6, max_length=16) class Meta: # 类名只能是Meta 而且下面的字段名都不能改 model = models.UserProfile # 对应models中的类 fields = '__all__' # 拿到所有的字段 # print(fields) exclude = ['is_active'] # 除了is_active这个字段 labels = { 'username': '用户名' # 前边的那个label改成'用户名' } # 下面的报错信息不会生效,因为在Mata中写的只对默认生成的字段有效 error_messages = { 'required': '不能为空', } # 批量操作, 把所有的字段都加上class=form-control这个属性 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): print(self.fields.values()) # 所有字段对象组成的列表 print('>>>>>', field) # 每个字段对象 field.widget.attrs.update({'class': 'form-control'}) # 全局钩子,常用来验证两次密码输入是否正确 def clean(self): pwd = self.cleaned_data.get('password', '') # 不写空字符串会显示None, None不能encode # print(self.cleaned_data) re_pwd = self.cleaned_data.get('re_password', '') if pwd == re_pwd: # 密码加密 md5 = hashlib.md5() md5.update(pwd.encode('utf-8')) pwd = md5.hexdigest() # 把加密后的密码改写到cleaned_data里面 self.cleaned_data['password'] = pwd return self.cleaned_data self.add_error('re_password', '两次密码不一致') raise ValidationError('两次密码不一致') # 这个全局的错误也必须写
# views.py文件 def register(request): if request.method == 'GET': form_obj = RegForm() return render(request, 'register.html', {'form_obj': form_obj}) else: form_obj = RegForm(request.POST) # 对数据库进行校验 if form_obj.is_valid(): form_obj.save() # 把你提供的数据按照相应的位置插进去,有就插,没有就不插 return HttpResponse('ok') # return redirect('login') return render(request, 'register.html', {'form_obj': form_obj}) # 前端标签中label中for要写form_obj.字段名.id_for_label 这样就可以了