0
点赞
收藏
分享

微信扫一扫

【django】用户注册状态保持、注册成功页面跳转到新闻页功能实现【11】

脱下愤怒的小裤衩 2022-04-23 阅读 39

说明:

如果需求是注册成功后即表示⽤户登⼊成功,那么此时可以在注册成功后实现状态保持
如果需求是注册成功后不表示⽤户登⼊成功,那么此时不⽤在注册成功后实现状态保持
芒果头条的需求是:注册成功后即表示⽤户登⼊成功

1. login()⽅法介绍

1、⽤户登⼊本质:
状态保持
将通过认证的⽤户的唯⼀标识信息(⽐如:⽤户ID)写⼊到当前浏览器的cookie 和服务端的 session 中。

2、login()⽅法:

Django⽤户认证系统提供了login()⽅法。

封装了写⼊session的操作,帮助我们快速登⼊⼀个⽤户,并实现状态保持。

3、login()位置:
django.contrib.auth.__init__.py⽂件中。
login(request, user, backend=None)

4、 状态保持 session
数据存储的位置:Redis数据库的1号库

# 配置Redis数据库
CACHES = {
    "default": { # 默认
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://192.168.17.3:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    "session": { # session
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://192.168.17.3:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    "verify_code": { # 验证码
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://192.168.17.3:6379/2",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"

2. login()⽅法登⼊⽤户

#todo 保存注册数据(入库操作)
try:
    user=Users.objects.create_user(username=username,password=password,phone=phone)
except DatabaseError:
    return render(request,'userapp/register.html',{'reg_error_msg':'注册失败'})

#todo 状态保持功能
login(request,user)

用户注册成功后进入到新闻首页

#todo 用户注册成功后返回响应结果
return redirect(reverse('newsapp:index'))

3、注册成功之后,跳转到新闻页面,先创建新闻子应用

python ../../manage.py startapp newsapp

注册子应用

4、配置路由

主路由

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^',include('userapp.urls')),
    re_path('^',include(('newsapp.urls','newsapp'),namespace='newsapp'))
]

子路由

from django.urls import path,re_path
from . import views

urlpatterns=[
    re_path('^$',views.IndexView.as_view(),name='index')
]

创建视图

from django.shortcuts import render
from django.views.generic.base import View
# Create your views here.
class IndexView(View):
    def get(self,request):
        return render(request,'newsapp/index.html')

5、创建新闻模板templates

在这里插入图片描述

6、注册操作

注册成功后,进入新闻首页

7、⻚⾯获取当前会话值

<ul class="header-user-links">
      {% if user.username %}
          欢迎您! <span style="font-weight: bolder;">[ {{ user.username }} ]</span>
          &emsp;<a href="/logout/">退出登录</a>&nbsp;
          {% else %}
          <li>
              <a href="/login/">登录</a>&nbsp;&nbsp;&nbsp;
              <a href="/register/">注册</a>
          </li>
      {% endif %}
</ul>

在这里插入图片描述

举报

相关推荐

0 条评论