一、下载Django-users2
百度搜索“pypi django-users2”。把这个包下载下来
点击右侧原谅色按钮,下载tar.gz包,然后解压,你会发现里面有个users文件夹,这就是我们想要的东西
二、复制users文件夹
打开前面建好的项目(mysite)文件夹然后将刚下载好的users文件复制进去
三、应用注册及模型替换(settings.py)
在内层主文件夹里的settings.py里的INSTALLED_APPS列表里注册用户账户系统users(否则不能用)
NSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main',
'users',
]
AUTH_USER_MODEL='users.User'
千万不要忘记底下那一行AUTH_USER_MODEL = ,那是把django的user模型换成users包里面的用户模型。不换的话users虽然安装成功了,依然用的是原版django用户模型。那就白干了。
四、更新用户模型(migrate)
打开dos命令跳转到项目(mysite)文件夹下,运行一下命令:
python manage.py migrate更新用户模型
五、创建超级管理员
python manage.py createsuperuser(注意密码输入是看不见的所以不要怀疑是你的键盘坏了)
六、运行服务器并浏览
python manage.py runserver 8003
访问127.0.0.1:8003/admin
进去找到user模型,点开它。如果出现如下画面(只有邮箱和active两列),说明我们的user模型替换成功了,如果还有first name, last name等其他列,说明替换失败,退回去重做!
大家可能觉得英文看着不爽不要着急马上我就教大家把他搞成中文的页面‘
首先打开settings.py找到
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
修改为:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
保存后刷新页面:
七、更改新的user模型
虽然我们替换成功,但是一个用户账户只有email一个信息绝对是不够用的,所以我们要向现在的user模型里扩充其他东西。也就是说我们要更改新的user模型
7.1修改users/models.py
找到users文件夹里的models.py打开它,找到现在还是空着的User模型(一般在最底下),如图
加入你想要的模型
class User(AbstractUser):
"""
Concrete class of AbstractUser.
Use this if you don't need to extend User.
"""
name = models.CharField(max_length=20,default="第一次登陆")#姓名
sex = models.CharField(max_length=3,default="男")#性别
birthday = models.CharField(max_length=20,default="1887-10-31")#生日
job_number= models.CharField(max_length=10,default="0001")#工作证号
zhengzhi_mianmao = models.CharField(max_length=10,default="群众")#政治面貌
zhangzhi_time = models.CharField(max_length=20,default="2017-10-31")#入党时间
job = models.CharField(max_length=30,default="工程师")#职称
job_time = models.CharField(max_length=20,default="2017-10-31")#获得职称时间
job_2 = models.CharField(max_length=30,default="员工")#职务
id_number = models.CharField(max_length=30,default="510411199703033451")#身份证
xue_li = models.CharField(max_length=30,default="本科")#学历
school = models.CharField(max_length=30,default="四川农业大学")#学校
graduate_time = models.CharField(max_length=20,default="2000-12-12")#毕业时间
job_join_time = models.CharField(max_length=20,default="2002-12-12")#入职时间
team_belong = models.CharField(max_length=20,default="c640")#所属部门
phone = models.CharField(max_length=30,default="1328445999")#手机号
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'
7.2更新数据库
首先python manage.py makemigrations
然后再python manage.py migrate
7.3 为user模型添一些小功能(从生日导出年龄)
from datetime import datetime
import json,time
def birthday_filter(birthday):
t=time.time()
dt=datetime.fromtimestamp(t)
b_year=birthday[:4]
b_month=birthday[4:6]
b_day=birthday[6:]
age=int(dt.year)-int(b-year)-1
if int(b_month)>(int(dt.month)-1):
if int(b_day)>(int(dt.day)-1):
age+=1
return age
def __str__(self):
return self.name
def age(self):
return birthday_filter(self.birthday)
class UserAdmin(BaseUserAdmin):
fieldsets = (
(None, {
'fields': ('email', 'password','name','sex','birthday','job_number',
'zhengzhi_mianmao','zhangzhi_time','job','job_time','job_2','id_number','xue_li',
'school','graduate_time','job_join_time','team_belong','phone')
}),
(_('Permissions'), {
'fields': ('is_active', 'is_staff', 'is_superuser',
'groups', 'user_permissions')
}),
(_('Important dates'), {
'fields': ('last_login', 'date_joined')
}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password1', 'password2')
}),
)
form = UserChangeForm
add_form = UserCreationForm
list_display = ('name','email', 'is_active')
list_filter = (UserModelFilter, 'is_staff', 'is_superuser', 'is_active',)
search_fields = ('email',)
ordering = ('email',)
actions = ('activate_users', 'send_activation_email', )
readonly_fields = ('last_login', 'date_joined', )
八、启动服务器并访问
python manage.py runserver 8003
访问user结果:
九、在主页上加入注册登录入口和登出按钮
9.1重新命名main中的bate.html文件
在users文件夹里也有一个base.html容易搞混,所以说名字一定要起长一些,避免重名,编程的时候最烦的就是和关键字重名。
9.2修改masite/main/view.py
def index(request):
return render(request,"base.main.html")
9.3修改主页
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">第一个网页</a>
</div>
<div>
<ul class="nav navbar-nav">
<li class="active"><a href="#">首页</a></li>
<li><a href="#">代办事项</a></li>
{% if request.user.is_authenticated %}
<li><a href="#">当前用户:{{request.user.name}}</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
个人中心
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="#">定值工具</a></li>
<li><a href="#">EJB</a></li>
<li><a href="#">Jasper Report</a></li>
<li class="divider"></li>
<li><a href="#">修改个人信息</a></li>
<li class="divider"></li>
<li><a href="#">登出</a></li>
</ul>
</li>
{% else %}
<li><a href="#">登录</a></li>
<li><a href="#">注册</a></li>
{% endif %}
</ul>
</div>
</div>
</nav>
9.4修改mysite/urs.py
from django.urls import path,include
path('accounts/',include('users.urls'))
9.5修改主页basemain.html
/accounts/login/是登录, /accounts/logout/是登出, /accounts/register/是注册
9.6改良登录界面
找到users里的templates里的base.html打开它,在head标签里加上Bootstrap的引用
<link rel="stylesheet" type="text/css" href="/static/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="/static/css/bootstrap-grid.css">
<script type="text/javascript" src="/static/js/jquery.js"></script>
<script type="text/javascript" src="/static/js/bootstrap.js"></script>
在下边的导航栏的class里加上一个navbar-inverse,如图(注意,我把原来的div改成了nav)
其他页面的修改过程是类似的,请自己去修改user文件夹下面的HTML文件
那么现在,点击登录!
页面跳转
原来django里面登录成功后默认会进入 /accounts/profile/地址,从字面意义上看是用户的个人信息修改页面,但是这个页面我们还没有写,所以当然就是404咯