首页 > 解决方案 > 如何修复Django中的自动登录?

问题描述

如何修复Django中的自动登录?

当有人通过键入 URL 进入某人的个人资料http://127.0.0.1:8000/profile/1时,当页面加载时,它将自动登录到个人资料,例如,管理员有 1 个个人资料,pk=1因此如果某些类型的 URL 像这样http://127.0.0.1:8000/profile/1,他将在没有密码的情况下登录到管理员用户名

我想要这样 没有人可以通过链接登录个人资料,他只能查看某人的个人资料 不能登录某人的个人资料

这是我的Views.py

def profile_detail(request,pk):
    user = get_object_or_404(User, pk=pk)
    model = user_register_model()
    return render(request,'profile_detail_view.html',{'user':user,'model':model,})

#register  view


def user_reg(request):
    register = False
    if request.method == 'POST':
        form = user_register_form(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.set_password(user.password)
            user.save()

            register = True

            if register == True:
                return HttpResponseRedirect("/accounts/login")

        else:
            print(form.errors)
    else:
        form = user_register_form()

    context = {'reg':form,}
    return render(request,'signup.html',context)

这是我的Base.html

  {% if user.is_authenticated %}
  <li class="nav-item">

    <a class="nav-link navaour" href="{% url 'profile' pk=user.pk %}"><i class="fa fa-user"></i>&nbsp; Profile</a>
  </li>
  <li class="nav-item">

    <a class="nav-link navaour" href="{% url 'logout' %}"><i class="fa fa-power-off"></i>&nbsp; Logout</a>
  </li>

  {% else %}
  <li class="nav-item">

    <a class="nav-link navaour" href="{% url 'register' %}"><i class="fa fa-check-square-o"></i>&nbsp; Sign up Free</a>
  </li>    
  <li class="nav-item">

    <a class="nav-link navaour" href="{% url 'login' %}"><i class="fa fa-user"></i>&nbsp; Login</a>
  </li>
  {% endif %}    

这是我的Profile_Detail_View.html

<div class="row">
    <div class="col-sm-3 col-md-2 col-5">
        <label style="font-weight:bold;">Full Name</label>
    </div>
    <div class="col-md-8 col-6">
        {{user.username}}
    </div>
</div>
<hr />

<div class="row">
    <div class="col-sm-3 col-md-2 col-5">
        <label style="font-weight:bold;">Join Date</label>
    </div>
    <div class="col-md-8 col-6">
        {{ model.join_date|date:"M d,Y" }}
    </div>
</div>
<hr />


<div class="row">
    <div class="col-sm-3 col-md-2 col-5">
        <label style="font-weight:bold;">Email</label>
    </div>
    <div class="col-md-8 col-6">
        {{ user.email }}
    </div>
</div>

这是我的Models.py

from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from django.utils import timezone

# Create your models here.
class user_register_model(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    join_date = models.DateTimeField(default=timezone.now)

这是我的Urls.py

from . import views
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('', views.index,name='index'),
    path('accounts/signup/', views.user_reg,name='register'),
    path('profile/<int:pk>',views.profile_detail,name='profile')

]

这是Gif 视频

在此处输入图像描述

标签: djangodjango-modelsdjango-formsdjango-viewsdjango-users

解决方案


我错过了base.html中的请求

我需要替换这一行:

{% if not user.is_authenticated %}

对此:

{% if not request.user.is_authenticated %}

推荐阅读