说明:
如果需求是注册成功后即表示?户登?成功,那么此时可以在注册成功后实现状态保持 如果需求是注册成功后不表示?户登?成功,那么此时不?在注册成功后实现状态保持 芒果头条的需求是:注册成功后即表示?户登?成功
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号库
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://192.168.17.3:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"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()?法登??户
try:
user=Users.objects.create_user(username=username,password=password,phone=phone)
except DatabaseError:
return render(request,'userapp/register.html',{'reg_error_msg':'注册失败'})
login(request,user)
用户注册成功后进入到新闻首页
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
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>
|