自强学堂
自强学堂:学习、分享、让你更强!
Django 教程HTMLCSSJAVASCRIPTJQUERYSQLPHPBOOTSTRAPANGULARXML
 

BVDN-4 用户注册登录

所有网站几乎都有一个最基本的功能:注册和登录(废话!)。所以我们建完网站后,第一件事要加上去的功能也是登录和注册。


Django-users2

登录和注册这么基本的东西,django里面当然也有。但是我们不用,我们用别人已经最好的django-users2这个包,这样我们需要做的事情就更少了。记住,工程师思维,能用别人的,就不要自己造。

百度搜索“pypi django-users2”。把这个包下载下来


点右上角的download

点击右侧原谅色按钮,下载tar.gz包,然后解压,你会发现里面有个users文件夹,这就是我们想要的东西

而今迈步从头越

我们这次重新建一个项目(怎么又重建……),django-admin startproject,然后把刚才解压出来的users文件夹复制进去。

这是我真要做的项目

这些操作重复了一遍又一遍,不要烦!重复才能学会。接下来,在内层主文件夹里的settings.py里的INSTALLED_APPS列表里注册用户账户系统users(否则不能用)

应用注册及模型替换

千万不要忘记底下那一行AUTH_USER_MODEL = ,那是把django的user模型换成users包里面的用户模型。不换的话users虽然安装成功了,依然用的是原版django用户模型。那就白干了。

migrate

接下来,用python manage.py migrate更新用户模型

migrate

并创建超级管理员

createsuperuser

这些都完成之后,我们runserver,访问127.0.0.1:8000/admin,登录进去

浓浓的Bootstrap风

进去找到user模型,点开它。如果出现如下画面(只有邮箱和active两列),说明我们的user模型替换成功了,如果还有first name, last name等其他列,说明替换失败,退回去重做!

只有两列

更改新的user模型

虽然我们替换成功,但是一个用户账户只有email一个信息绝对是不够用的,所以我们要向现在的user模型里扩充其他东西。也就是说我们要更改新的user模型

只有email和passwd

找到users文件夹里的models.py打开它,找到现在还是空着的User模型(一般在最底下),如图

空的User模型等你来填充

加入你想要的模型,如图

model修改

以后的model都这样修改和添加。做完这些之后,我们再次更新数据库(注意操作不一样)首先python manage.py makemigrations

然后再python manage.py migrate,如图

更新数据库

这些都做完以后,我们再为user模型添一些小功能,如从生日导出年龄,如图所示

在尾部加入几个函数

为了实现age方法,写出birthday_filter函数

加在最上方

最后,打开admin.py找到class UserAdmin(BaseUserAdmin):,作如下修改(注意上面的fields和下面的list_display)

加入field

这些都改过以后,runserver,再次访问到User,会发现有变化

修改后的User

这样的User模型,是不是不那么简陋了?是不是能用了?

通过上面的修改,我们有了可以实际应用的User模型,现在我们需要在主页上加入注册登录入口和登出按钮。


还记得Base.html吗?

第二节编的base.html,不要删除。现在它该再次出场了。

startapp main,再重复一遍,把base.html和static复制进来


似曾相识

在views.py里添加响应函数

main.index

在settings.py里注册main应用

注册main

在urls.py里添加地址

添加地址

runserver,确保能访问到我们的主页

???

为什么我们看到了这玩意?原来在users文件夹里也有一个base.html!我们得改名。

巧了!

所以说名字一定要起长一些,避免重名,编程的时候最烦的就是和关键字重名。

改名1
改名2

改完名后,就可以正常访问主页了

成功

接下来,就该修改我们的主页了


修改主页

找到改名之后的basemain.html,打开它,找到导航栏

导航栏

修改成这样

修改后的导航栏

很多内容看不懂?别急,容我慢慢讲来:

首先,这是Bootstrap导航栏修改的教程:http://www.runoob.com/bootstrap/bootstrap-navbar.html,那些class=“”应该怎么写,请自己去看,我就不讲了,我讲重点。

注意看代码中间段的{% if ... %},这个是Django模板,它代表的是Django后台往前端送网页文件之前,对网页文件进行的一些加工。

比如说这里的{% if request. user. is_ authen ticated %},仔细看,结合上下文可以判断出,它是用来判断当前是不是有人登录,如果有人登录就显示个人中心,如果未登录就显示登录、注册按钮。

然后注意{{ request.user.name }},这个也是Django模板,但是它的作用是传递数据。也就是说Django后台往前端送网页之前会先把这个双括号换成request.user.name,也就是当前登录用户的名字。

在我们详细介绍Vue和Ajax之前,这就是我们传递数据的唯一方式了。好好使用哦!好嘞,我们首页改完了,现在可以试试看效果

修改后的首页

但是,点击了登录按钮后,好像没有反应……那是当然的了,你还没有加入超链接。这部分内容我们下次再讲。

BVDN,傻子也能建网站。

自强学堂 源代码下载:https://github.com/twz915/zqxt
服务承诺:2017年03月11日到12日出现了网站不可访问,不少同学发来了邮件关心,感谢大家对自强堂Django教程的支持与厚爱。自强学堂不会关闭,我向大家承诺,我依然会坚持每天答疑,看邮件回复邮件,服务器费用已经缴纳三年,后期会努力提高服务稳定性。我也还至少会再坚持做三年,直到2020年03月12日,我愿意坚持做这件事,是因为我认为这很有意义,2015年劳动节开始写这个教程的时候,我没有想到如今,每天会有5000人来自强学堂看Django教程,我希望能帮助到更多的人。—— 2017年03月12日于北京深夜 涂伟忠