簡體   English   中英

login_required 和注銷在 django 中不起作用

[英]login_required and logout is not working in django

這是我的意見.py

from django.shortcuts import render, get_object_or_404,redirect
from .models import Post,Author
from django.contrib.auth.decorators import login_required
from django.contrib.auth import  authenticate,get_user_model,login,logout
from .forms import UserLoginForm,UserRegisterForm


def login_view(request):
 next = request.GET.get('next')
 form = UserLoginForm(request.POST or None)
 if form.is_valid():
    username = form.cleaned_data.get('username')
    password = form.cleaned_data.get('password')
    user = authenticate(username=username, password=password)
    login(request,user)
    if next:
         return redirect(next)
    return redirect('/')

  context = {
    'form': form,
 }
return render(request, "login.html", context)


def register_view(request):
 next = request.GET.get('next')
 form = UserRegisterForm(request.POST or None)
 if form.is_valid():
    user = form.save(commit=False)
    password = form.cleaned_data.get('password')
    user.set_password(password)
    user.save()
    new_user = authenticate(username = user.username, password = password)
    login(request,user)
    if next:
         return redirect(next)
    return redirect('/')

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


def logout_view(request):
 logout(request)
 return  redirect('/')


@login_required

def home(request):
 return render(request,"home.html", {})


 def posts_list(request):
  all_posts = Post.objects.all()
   context = {
    'all_posts': all_posts
  }
  return render(request,"post_list.html",context)


def posts_detail(request, slug):
  unique_post = get_object_or_404(Post, slug=slug)
   context = {
    'post': unique_post,
 }
  return render(request,"posts_detail.html",context)

我的 url.py 是

from django.contrib import admin
from django.urls import path
from posts import views

urlpatterns = [
  path('admin/', admin.site.urls),
  path('login/', views.login_view),
  path('signup/', views.register_view),
  path('logout/', views.logout),
  path('', views.home),
 path('post/',views.posts_list),
 path('post/<slug:slug>/', views.posts_detail,name='post'),
]

so,the problem the home.html directly redirected without going form login route and the logout function is not workig i am getting ValueError at /logout/ The view django.contrib.auth.logout didn't return an HttpResponse object. 它返回 None 代替。 寫的 function 是正確的注銷還是可能有一些錯誤我無法弄清楚主要問題是什么

注意:- @login required 工作但注銷 function 不起作用

請編輯 urls.py 以注銷:

path('logout', views.logout_view)

嘗試以這種方式在 settings.py 文件的底部提及登錄和注銷設置

首先更新您的主路徑

path('', views.home, name = 'home'),

然后在 settings.py 文件的底部放這個,

LOGIN_REDIRECT_URL = 'home'

LOGOUT_REDIRECT_URL = 'home'

如果您願意,也可以使用其他模板名稱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM