博客动态
Hi!欢迎来到Jerry Coding!公众号垃圾分类增加学习功能,关注下面的公众号一起来帮助Jerry学习更多垃圾分类知识吧!
微信扫码

扫一扫关注我

More
关于
New
RSS

Django建站历程:(四)django-allauth实现用户登陆

2018年12月15日 Jerry 2272 2019年9月12日

        如果我们的博客网站需要增加一个用户的注册登陆功能模块,你可以自己一点点敲代码实现,这对能力也有不错的提升。但是博主机智(tou lan)直接使用了django-allauth。django-allauth主要有以下功能:用户注册、登陆、验证、找回密码、第三方登陆等。详细的介绍可以参考 Django-allauth

1、直接输入以下命令进行安装:

root@jerryls-site1:/home/mysite# pip install django-allauth

2、在settings.py文件APP中添加allauth ,由于对'django.contrib.sites'有依赖,需要同步安装,并制定SITE_ID=1以及相关配置。

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # for allauth
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',

    # for blog
    'blog',
]

SITE_ID = 1
#作用是登陆时可以用用户名也可以用邮箱
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
#作用时注册时,邮箱是必备的。
ACCOUNT_EMAIL_REQUIRED = True
#禁用注册邮箱验证
ACCOUNT_EMAIL_VERIFICATION='none'
#登出直接退出,不用确认
ACCOUNT_LOGOUT_ON_GET=True

3、添加全局路由

如下修改全局urls.py文件

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('allauth.urls')),
    path('', include('blog.urls', namespace = 'blog')),
]

4、配置数据库

root@jerryls-site1:/home/mysite# ./manage.py makemigrations
root@jerryls-site1:/home/mysite# ./manage.py migrate

5、运行服务器输入以下网址就可以实现登陆、注册。

登陆(account_login):/accounts/login/

注册(account_signup):/accounts/signup/

退出(account_logout):/accounts/logout/

登陆注册都是英文,这样很不爽呀,修改全局settings.py的语言参数就OK,顺便改了个时区:

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

 

6、将登陆注册的链接集成到导航栏右侧

我们实现一个类似本站的登陆注册按钮:没有登陆的时候,导航栏右侧是登陆、注册按钮,登陆成功后是用户名下拉列表。逻辑很简单:

if  auth sucess
{
    显示用户名下拉框
}
else
{
	显示登陆、注册 
}

修改nav.html部分代码如下:

      <ul class="nav navbar-nav navbar-right">
{% if user.is_authenticated %}
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{user.username}}<span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">下拉1</a></li>
            <li><a href="#">下拉2</a></li>
            <li><a href="#">下拉3</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="{% url 'account_logout' %}">退出</a></li>
          </ul>
        </li>
{% else %}
        <li><a href="{% url 'account_login' %}">登陆</a></li>
        <li><a href="{% url 'account_signup' %}">注册</a></li>
{% endif %}
      </ul>

{% xxx %} 一般用于函数的调用,{{xxxx}}一般用于变量的取值。

登陆的链接为 {% url 'account_login' %} ,表示url反向解析出网址,“account_url”其实就是urls.py里面定义的name,如下图:

运行成功后可以得到如下界面:

7、如果需要我们发送找回密码的邮件,还需要配置邮箱

同样在全局的settings.py里面设置,以下以163邮箱举例:

EMAIL_HOST = 'smtp.163.com'            #配置smtp地址
EMAIL_HOST_USER = 'example@163.com'    #配置邮箱地址 
EMAIL_HOST_PASSWORD = 'xxxxxx'         #配置授权码,注意是授权码,不是邮箱密码
EMAIL_PORT = 465                       #端口号
EMAIL_USE_SSL = True                   #指定SSL发送
EMAIL_FROM = "MyBlog"                  #可以指定邮件发件人
DEFAULT_FROM_EMAIL = 'Example<example@163.com>' 

以上是常用配置,其他配置可以选用。

需要邮箱开通SMTP服务,不同邮箱可能不同,大家自己搜索吧。配置完成即可发邮件。

 

以上所有,就简单实现了我们博客的登陆注册等功能。详细的介绍大家可以参考文章开始的英文文档。

本章节代码上传至主页GitHub链接中。


原创文章,转载请注明出处: https://jerrycoding.com/article/site_building_4

微信
支付宝

您尚未登录,暂时无法评论。请先 登录 或者 注册

4 人参与 | 14 条评论

  • usernamesss:
    2019年11月23日

    您好,我的登录用的自己写的表单,没直接引用{{ from.as_p }}结果用户输入信息没法提示错误,请问这个错误信息怎么从后端引用显示到前端页面上

    • Jerry:
      2019年11月23日

      [@usernamesss] :我觉得可以前端js做判断弹出对话框,也可以后端ajax将错误信息返回。

      回复
    • usernamesss:
      2019年11月23日

      @[Jerry] :实现和你现在的一样就行,我不太清楚错误信息是那个字段比如是{{ form.name.errors }}返回的还是别的,您这块当时怎么处理的,直接修改的表单还是自己写的前端表单

      回复
    • usernamesss:
      2019年11月23日

      @[Jerry] :<form class="login" method="POST" action="{% url 'account_login' %}">
            {% csrf_token %}
            <div class="form-group" style="text-align: left">
                <label for="id_login">用户名</label>
                <input class="form-control" type="text" id="id_login" required name="login" placeholder="用户名" autofocus="autofocus">
            </div>
            <div style="text-align: left">
                <a href="{% url 'account_signup' %}">还没有账号?点我注册</a>
            </div>
            <div class="form-group" style="text-align: left">
                <label for="id_password">密码</label>
                <input class="form-control" type="password" id="id_password" name="password" placeholder="密码" autofocus="autofocus">
            </div>
            <div style="text-align: left">
                <a class="secondaryAction layui-text" href="{% url 'account_reset_password' %}">
                  忘记密码?
              </a>
            </div>
            <span class="text-right">
              <button class="btn btn-primary" type="submit">登录</button>
           </span>
      </form>

      回复
    • usernamesss:
      2019年11月23日

      @[Jerry] :这个是我的表单代码,错误信息怎么加呢

      回复
  • Kuroyuki_hime:
    2019年9月21日

    您好,我有一个问题:我确实实现了您文中所说的页面,但是在登录或注册之后页面跳转到了Page Not Found,不知道您知道应该怎么解决么?因为allauth默认的登录和注册跳转貌似是/account/profile,但是并没有这个页面。

    • Jerry:
      2019年9月21日

      [@Kuroyuki_hime] :全局配置文件中有这个配置,设置跳转路径。settings. py 你可以找一下

      回复
    • Kuroyuki_hime:
      2019年9月21日

      @[Jerry] :多谢,找到了。

      回复
  • 1486842581@qq.com:
    2019年9月12日

    你好请问  引入django-allauth配置完之后,127.0.0.1  k可以看到首页导航栏,可是加上/accounts/login/ 显示TemplateSyntaxError at /accounts/login/ 这个是引入进来的 怎么还有语法错误

    • Jerry:
      2019年9月12日

      @[1486842581@qq.com] :这要看具体什么错误,提示哪一行的错误。

      回复
    • 1486842581@qq.com:
      2019年9月12日

      @[Jerry] :你好, 问题已解决!根据提示的错误,然后我找到安装的allauth包进去,发现'allauth.account','allauth.socialaccount',您的博文提示没有在INSTALLED_APPS =['allauth.socialaccount'],只有前者。这是一处小漏洞。能不能通过qq好友,有问题可以详细的问您呢

      回复
    • Jerry:
      2019年9月12日

      @[1486842581@qq.com] :网站左侧栏 二维码下面有QQ联系的,点击就可以。

      回复
    • 1486842581@qq.com:
      2019年9月12日

      @[Jerry] :没有添加好友  不能发起会话!

      回复
    • Jerry:
      2019年9月12日

      @[1486842581@qq.com] :再试下吧,应该可以了

      回复