起步
完成Django项目的基础设置,在项目根目录下建立一个static的目录,用于存放js,css,图片等网页渲染所需静态文件
进入setting,设置数据库,文件路径等配置信息:
DATABASES = {
"""
数据库配置
"""
'default': {
'ENGINE': 'django.db.backends.mysql', # 连接数据库的类型
'NAME': 'Winston_crm', # 数据库名
'HOST': 'xxxxxxxx', # 主机地址
'PORT': 3306, # 端口号
'USER': 'xxxx', # 登录用户
'PASSWORD': 'xxxxxxx', # 登录密码
}
}
"""
设置static文件路径
"""
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
"""
在model中改写Django中user表所需路径设置
"""
AUTH_USER_MODEL = 'crm.UserProfile'
初始化数据库,在控制台执行以下命令:
python manage.py makemigrations //记录表变更
python manage.py migrate //提交表变更
url设置
进入url.py文件,设置url分发路由,以及导入视图处理函数:
改造登录页面
这里主要涉及到前端框架的使用,打开Bootstrap或jQuery资源库,凭个人喜好,寻找一个好看的页面移植改造,或自行设计:
把页面需导入的css,js,图片等放入static目录下,把HTML页面放到templates目录下
处理login的视图函数
对应的login.html文件:
提示用户名或密码为空:
密码或用户名错误,登录失败:
处理注册的视图函数
打开form.py文件
继承使用Django自带的form表单进行处理
# 注册form
class RegForm(BaseForm):
password = forms.CharField(
label='密码',
widget=forms.widgets.PasswordInput(),
min_length=6,
error_messages={'min_length': '最小长度为6',
'required': '密码不能为空'}
)
re_password = forms.CharField(
label='确认密码',
widget=forms.widgets.PasswordInput(),
error_messages={'required': '密码不能为空'}
)
class Meta:
model = models.UserProfile
fields = '__all__' # 所有字段
fields = ['username', 'password', 're_password', 'name', 'department'] # 指定字段
widgets = {
'username': forms.widgets.EmailInput(attrs={'class': 'form-control'}),
'password': forms.widgets.PasswordInput,
}
labels = {
'username': '用户名',
'password': '密码',
'name': '姓名',
'department': '部门',
}
error_messages = {
'username': {
'required': '密码不能为空'
},
'name': {
'required': '姓名不能为空'
},
'department': {
'required': '部门不能为空'
}
}
def clean(self):
pwd = self.cleaned_data.get('password')
re_pwd = self.cleaned_data.get('re_password')
if pwd == re_pwd:
return self.cleaned_data
self.add_error('re_password', '两次密码不一致')
raise ValidationError('两次密码不一致')
在视图函数中导入RegForm创建对象,并进行验证反馈:
找到一个好看的注册页面,加以改造:
<form class="form-horizontal" novalidate action="" method="post">
<h2>注册</h2>
{% csrf_token %}
<div class="form-group {% if form_obj.username.errors %}has-error{% endif %} ">
<label for="{{ form_obj.username.id_for_label }}"
class="col-sm-2 control-label"> {{ form_obj.username.label }}</label>
<div class="col-sm-10">
{{ form_obj.username }}
<span class="help-block">
{{ form_obj.username.errors.0 }}
</span>
</div>
</div>
<div class="form-group {% if form_obj.password.errors %}has-error{% endif %}">
<label for="{{ form_obj.password.id_for_label }}"
class="col-sm-2 control-label"> {{ form_obj.password.label }}</label>
<div class="col-sm-10">
{{ form_obj.password }}
<span class="help-block">
{{ form_obj.password.errors.0 }}
</span>
</div>
</div>
<div class="form-group {% if form_obj.re_password.errors %}has-error{% endif %}">
<label for="{{ form_obj.re_password.id_for_label }}"
class="col-sm-2 control-label"> {{ form_obj.re_password.label }}</label>
<div class="col-sm-10">
{{ form_obj.re_password }}
<span class="help-block">
{{ form_obj.re_password.errors.0 }}
</span>
</div>
</div>
<div class="form-group {% if form_obj.name.errors %}has-error{% endif %}">
<label for="{{ form_obj.name.id_for_label }}"
class="col-sm-2 control-label"> {{ form_obj.name.label }}</label>
<div class="col-sm-10">
{{ form_obj.name }}
<span class="help-block">
{{ form_obj.name.errors.0 }}
</span>
</div>
</div>
<div class="form-group {% if form_obj.department.errors %}has-error{% endif %}">
<label for="{{ form_obj.department.id_for_label }}"
class="col-sm-2 control-label"> {{ form_obj.department.label }}</label>
<div class="col-sm-10">
{{ form_obj.department }}
<span class="help-block">
{{ form_obj.department.errors.0 }}
</span>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Sign in</button>
</div>
</div>
</form>
感觉有点丑,emmmm,后面没来及改造
错误提示: