起步
完成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,後面沒來及改造
錯誤提示: