@[TOC]
# Django项目:LOL学院学员管理系统(更新中)
## 表结构设计
这里只涉及客户信息表及其相关的表,完整项目见文末链接。
```python
# models.py
from django.db import models
# Create your models here.
class UserInfo(models.Model):
"""用户信息表"""
username = models.CharField(max_length=16, verbose_name='姓名')
password = models.CharField(max_length=32, verbose_name='密码')
email = models.EmailField()
telephone = models.CharField(max_length=16)
is_active = models.BooleanField(default=True)
class Meta:
verbose_name_plural = '用户信息表'
def __str__(self): # __unicode__
return self.username
class CustomerInfo(models.Model):
"""客户信息"""
name = models.CharField(max_length=32, default=None)
contact_type_choices = (
('0', 'qq'),
('1', '微信'),
('2', '手机'),
)
contact_type = models.CharField(choices=contact_type_choices, default='0', max_length=16)
contact = models.CharField(max_length=64, unique=True)
source_choices = (
('0', 'QQ群'),
('1', '51CTO'),
('2', '百度推广'),
('3', '知乎'),
('4', '转介绍'),
('5', '其他'),
)
source = models.CharField(choices=source_choices, max_length=16)
referral_from = models.ForeignKey('self', null=True, blank=True, verbose_name='转介绍', on_delete=models.CASCADE)
consult_courses = models.ManyToManyField('Course', verbose_name='咨询课程')
consult_content = models.TextField(verbose_name='咨询内容')
status_choices = (
('0', '未报名'),
('1', '已报名'),
('2', '已退学'),
)
status = models.CharField(choices=status_choices, max_length=16)
consultant = models.ForeignKey('UserInfo', verbose_name='课程顾问', on_delete=models.CASCADE)
date = models.DateField(auto_now_add=True)
class Meta:
verbose_name_plural = '客户信息表'
def __str__(self):
return self.name
class Course(models.Model):
"""课程表"""
name = models.CharField(verbose_name='课程名称', max_length=64, unique=True)
price = models.PositiveSmallIntegerField() # 必须为正
period = models.PositiveSmallIntegerField(verbose_name='课程周期(月)', default=5)
outline = models.TextField(verbose_name='大纲')
class Meta:
verbose_name_plural = '课程表'
def __str__(self):
return self.name
```
## 登录注册页面
自己可以去模板之家等网站扒一个自己喜欢的登录注册校验模板
login.html
```html
{% load static %}
<!DOCTYPE html>
<!-- saved from url=(0051)https://www.jq22.com/demo/jquery-Sharelink20151012/ -->
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>登陆</title>
<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
<div class="login-container">
<h1>SuperCRM 登录页面</h1>
<div class="connect">
<p>欢迎来到LOL学院</p>
</div>
<form action="" method="post" id="loginForm"
novalidate="novalidate">
{% csrf_token %}
<div>
<input type="username" name="username" class="username" placeholder="用户名" oncontextmenu="return false"
onpaste="return false">
</div>
<div>
<input type="password" name="password" class="password" placeholder="密码" oncontextmenu="return false"
onpaste="return false">
</div>
<button id="submit" type="submit">登 陆</button>
<span style="color: red">{{ error }}</span>
</form>
</div>
<a href="{% url 'register' %}">
<button type="button" class="register-tis">还有没有账号?</button>
</a>
</div>
<script src="{% static 'js/jquery.min.js' %}"></script>
{#<script src="./登陆丨Sharelink_files/jquery.min.js(1).下载"></script>#}
<script src="{% static 'js/common.js' %}"></script>
<script src="{% static 'js/supersized.3.2.7.min.js' %}"></script>
<script src="{% static 'js/supersized-init.js' %}"></script>
<script src="{% static 'js/jquery.validate.min.js' %}"></script>
</body>
</html>
```
![image-20201125093900934](https://img-blog.csdnimg.cn/img_convert/3495889ffbee66e3404cb72e3e511523.png)
注册页面
```html
{% load static %}
<!DOCTYPE html>
<!-- saved from url=(0064)https://www.jq22.com/demo/jquery-Sharelink20151012/register.html -->
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>登陆</title>
<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
<div class="register-container">
<h1>ShareLink</h1>
<div class="connect">
<p style="left: 0%;">Link the world. Share to world.</p>
</div>
<form action="" method="post" id="registerForm"
novalidate="novalidate">
{% csrf_token %}
{% for field in register_form_obj %}
<div>
{# <label for="{{ field.id_for_label }}">{{ field.label }}</label>#}
{{ field }}
<span style="color: red;">{{ field.errors.0 }}</span>
</div>
{% endfor %}
<button id="submit" type="submit">注 册</button>
</form>
<a href="{% url 'login' %}">
<button type="button" class="register-tis">已经有账号?</button>
</a>
</div>
<script src="{% static 'js/jquery.min.js' %}"></script>
{#<script src="./登陆丨Sharelink_files/jquery.min.js(1).下载"></script>#}
<script src="{% static 'js/common.js' %}"></script>
<script src="{% static 'js/supersized.3.2.7.min.js' %}"></script>
<script src="{% static 'js/supersized-init.js' %}"></script>
<script src="{% static 'js/jquery.validate.min.js' %}"></script>
</body>
</html>
```
![image-20201125093932101](https://img-blog.csdnimg.cn/img_convert/40c15b8ff7a7c8bb3a1ea132473a0d5d.png)
## 登录处理视图逻辑和URL
```python
# views.py
import re
from django.shortcuts import (
render, HttpResponse, redirect
)
from django.core.exceptions import ValidationError
from django.views import View
from django import forms
from app01 import models
from app01.utils.hashlib_func import set_md5
from app01.utils.page_html import MyPagination
# Create your views here.
# 自定义验证规则
def mobile_validate(value):
mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
if not mobile_re.match(value):
raise ValidationError('手机号码格式错误') # 自定义验证规则的时候,如果不符合你的规则,需要自己发起错误
class RegisterForm(forms.Form):
username = forms.CharField(
max_length=16,
min_length=6,
label='用户名',
widget=forms.widgets.TextInput(attrs={'class': 'username', 'autocomplete': 'off', 'placeholder': '用户名', }),
error_messages={
'required': '用户名不能为空!',
'max_length': '用户名不能大于16位!',
'min_length': '用户名不能小于6位!',
}
)
password = forms.CharField(
max_length=32,
min_length=6,
label='密码',
widget=forms.widgets.PasswordInput(attrs={'class': 'password', 'placeholder': '密码', 'oncontextmenu': 'return false', 'onpaste': 'return false', }),
error_messages={
'required': '密码不能为空!',
'max_length': '密码不能大于16位!',
'min_length': '密码不能小于6位!',
}
)
r_password = forms.CharField(
label='确认密码',
widget=forms.widgets.PasswordInput(attrs={'class': 'password', 'placeholder': '请再次
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码
资源推荐
资源详情
资源评论
收起资源包目录
Django客户管理系统源码.zip (201个子文件)
views.py.bak 11KB
adminlte.css 774KB
adminlte.min.css 674KB
adminlte.core.css 386KB
adminlte.core.min.css 328KB
adminlte.plugins.css 195KB
adminlte.plugins.min.css 176KB
bootstrap.css 143KB
adminlte.components.css 140KB
adminlte.components.min.css 126KB
bootstrap.min.css 118KB
all.css 71KB
fontawesome.css 69KB
all.min.css 57KB
fontawesome.min.css 56KB
v4-shims.css 40KB
v4-shims.min.css 26KB
bootstrap-theme.css 26KB
bootstrap-theme.min.css 23KB
adminlte.extra-components.css 21KB
adminlte.extra-components.min.css 18KB
svg-with-js.css 8KB
adminlte.pages.css 7KB
style.css 7KB
svg-with-js.min.css 6KB
adminlte.pages.min.css 6KB
regular.css 734B
brands.css 732B
solid.css 727B
regular.min.css 677B
brands.min.css 675B
solid.min.css 669B
fa-solid-900.eot 198KB
fa-brands-400.eot 130KB
fa-regular-400.eot 34KB
glyphicons-halflings-regular.eot 20KB
.gitignore 117B
starter.html 12KB
customer.html 4KB
course_records.html 3KB
study_records.html 3KB
follow_customer.html 3KB
student_enrollment.html 3KB
register.html 3KB
login.html 2KB
role_list.html 1KB
add_course_record.html 804B
add_enrollment.html 801B
add_follow_customer.html 796B
add_customer.html 789B
menu.html 279B
supercrm.iml 1KB
photo4.jpg 1.12MB
photo3.jpg 383KB
boxed-bg.jpg 121KB
2.jpg 66KB
3.jpg 54KB
1.jpg 49KB
prod-1.jpg 47KB
prod-2.jpg 33KB
prod-5.jpg 33KB
prod-4.jpg 27KB
prod-3.jpg 21KB
user2-160x160.jpg 7KB
user5-128x128.jpg 6KB
user7-128x128.jpg 6KB
user8-128x128.jpg 5KB
user6-128x128.jpg 4KB
user3-128x128.jpg 3KB
user4-128x128.jpg 3KB
user1-128x128.jpg 3KB
jquery.js 281KB
jquery.js 274KB
bootstrap.bundle.js 223KB
jquery.slim.js 222KB
bootstrap.js 132KB
jquery.min.js 86KB
bootstrap.bundle.min.js 79KB
jquery.slim.min.js 69KB
bootstrap.js 68KB
bootstrap.min.js 59KB
adminlte.js 57KB
bootstrap.min.js 36KB
adminlte.min.js 25KB
jquery.validate.min.js 21KB
supersized.3.2.7.min.js 18KB
demo.js 12KB
core.js 9KB
dashboard.js 7KB
dashboard2.js 6KB
dashboard3.js 4KB
common.js 3KB
supersized-init.js 484B
npm.js 484B
jquery.min.js 339B
LICENSE 9KB
lol_name 1KB
adminlte.min.css.map 1.41MB
adminlte.css.map 1.17MB
adminlte.core.css.map 776KB
共 201 条
- 1
- 2
- 3
「已注销」
- 粉丝: 842
- 资源: 3601
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (179941432)基于MATLAB车牌识别系统【GUI含界面】.zip
- (179941434)基于MATLAB车牌识别系统【含界面GUI】.zip
- (178021462)基于Javaweb+ssm的医院在线挂号系统的设计与实现.zip
- (178047214)基于springboot图书管理系统.zip
- 张郅奇 的Python学习过程
- (23775420)欧姆龙PLC CP1H-E CP1L-E CJ2M CP1E 以太网通讯.zip
- (174590622)计算机课程设计-IP数据包解析
- (175550824)泛海三江全系调试软件PCSet-All2.0.3 1
- (172742832)实验1 - LC并联谐振回路仿真实验报告1
- 网络搭建练习题.pkt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页