说明:
如果需求是注册成功后即表示⽤户登⼊成功,那么此时可以在注册成功后实现状态保持
如果需求是注册成功后不表示⽤户登⼊成功,那么此时不⽤在注册成功后实现状态保持
芒果头条的需求是:注册成功后即表示⽤户登⼊成功
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>
 <a href="/logout/">退出登录</a>
{% else %}
<li>
<a href="/login/">登录</a>
<a href="/register/">注册</a>
</li>
{% endif %}
</ul>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123320.html