这是我的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)
我的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'),
]
因此,home.html的直接重定向问题没有通过表单登录路由,并且注销功能不起作用,我在/ logout /处遇到ValueError。视图django.contrib.auth.logout没有返回HttpResponse对象。它返回None。编写的函数是否适合注销或可能出现一些错误,我无法弄清主要问题是什么]
注意:-@login必需,但注销功能不起作用