简体   繁体   中英

login_required and logout is not working in django

here's my views.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)

and my url.py is

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. It returned None instead. Is the written function is correct for logout or may some error i can't figure out what the main problem is

note:- @login required worked but logout function is not working

Pleas edit the urls.py for logout:

path('logout', views.logout_view)

Try mentioning login and logout settings at the bottom of your settings.py file in this manner

update your home path first

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

then at the bottom of settings.py file put this,

LOGIN_REDIRECT_URL = 'home'

LOGOUT_REDIRECT_URL = 'home'

you can also use some other template name if you like

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM