【发布时间】:2018-08-29 18:07:36
【问题描述】:
django Authentification中的url问题
这是我的应用 urls.py
from django.urls import path, re_path
from . import views
app_name = 'music'
urlpatterns = [
path('register/', views.register, name='register'),
path('login_user/', views.login_user, name='login_user'),
path('logout_user/', views.logout_user, name='logout_user'),
#path('<int:album_id>/', views.detail, name='detail'),
path('<int:pk>/', views.DetailView.as_view(), name='detail'),
#re_path(r'^(?P<album_id>[0-9]+)/$', views.detail, name='detail'),
#path('<int:album_id>/favorite/', views.favorite, name='favorite'),
path('album/add', views.AlbumCreate.as_view(), name='album-add'),
path('album/<int:pk>/', views.AlbumUpdate.as_view(), name='album-update'),
path('album/<int:pk>/delete/', views.AlbumDelete.as_view(), name='album-delete'),
path('index/', views.IndexView.as_view(), name='index'),
path('', views.login_user)
# path('', views.index, name='index'),
]
这是我的 views.py 文件
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout
from django.views import generic
from django.views.generic import View
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from django.contrib.auth.decorators import login_required
from .models import Album, Song
from django.db.models import Q
from .forms import UserForm
class IndexView(generic.ListView):
template_name = 'music/index.html'
def get_queryset(self):
return Album.objects.all()
class DetailView(generic.DetailView):
model = Album
template_name = 'music/detail.html'
class AlbumCreate(CreateView):
model = Album
fields = ['artist', 'alum_title', 'genre', 'album_logo']
class AlbumUpdate(UpdateView):
model = Album
fields = ['artist', 'alum_title', 'genre', 'album_logo']
class AlbumDelete(DeleteView):
model = Album
success_url = reverse_lazy('music:index')
@login_required(login_url="/login_user/")
class UserFormView(View):
form_class = UserForm
template_name = 'music/registration_form.html'
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name,{'form':form})
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.set_password(password)
user.save()
user = authenticate(username=username, password=password)
if user is not None :
if user.is_active:
login(request, user)
return redirect('music:index')
return render(request, self.template_name,{'form' : form})
context = {
"form": form,
}
return render(request, 'music/registration_form.html', context)
def logout_user(request):
logout(request)
form = UserForm(request.POST or None)
context = {
"form": form,
}
return render(request, 'music/login.html', context)
def login_user(request):
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
albums = Album.objects.filter(user=request.user)
return render(request, 'music/index.html', {'albums': albums})
else:
return render(request, 'music/login.html', {'error_message': 'Your account has been disabled'})
else:
return render(request, 'music/login.html', {'error_message': 'Invalid login'})
else:
return render(request, 'music/login.html')
def register(request):
form = UserForm(request.POST or None)
if form.is_valid():
user = form.save(commit=False)
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.set_password(password)
user.save()
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
albums = Album.objects.filter(user=request.user)
return render(request, 'music/index.html', {'albums': albums})
context = {
"form": form,
}
return render(request, 'music/register.html', context)
这是我的 models.py 文件
from django.contrib.auth.models import Permission, User
from django.db import models
from django.urls import reverse
class Album(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
artist = models.CharField(max_length=20)
alum_title = models.CharField(max_length=20)
genre = models.CharField(max_length=10)
album_logo = models.FileField()
def get_absolute_url(self):
return reverse('music:detail', kwargs={'pk':self.pk})
def __str__(self):
return self.alum_title + self.artist
class Song(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE)
file_type = models.CharField(max_length=10)
song_title = models.CharField(max_length=20)
is_favorite = models.BooleanField(default=False)
def __str__(self):
return self.song_title
我的问题是,当我注销并尝试使用 url 时,它会记录但用户会话已结束 我尝试使用 login_required 解决问题,但没有成功,谁能帮我解决这个问题?
【问题讨论】:
标签: python-3.x django-2.0