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 这样就可以了

 

posted @ 2019-03-12 22:17  一个很善良的抱爱  阅读(227)  评论(0编辑  收藏  举报