Django LoginRequiredMixedIn не позволяет пользователям войти в систему - PullRequest
0 голосов
/ 21 марта 2020

Я создаю приложение, которое позволяет пользователям просматривать сообщения. Тем не менее, каждый раз, когда я пытаюсь войти в систему, если я не установил LoginRequiredMixin, пользователь все равно сможет просматривать сообщения после выхода из системы. Но когда я устанавливаю LoginRequiredMixin каждый раз, когда пользователь помещает информацию, он продолжает возвращаться на главную страницу, и ничего не происходит.

my home / views.py

@login_required
def home(request):
    posts = Post.objects.all()
    context = {'posts':posts}
    return render(request, 'home/home.html', context)


class PostListView(ListView):
    model = Post
    template_name = 'home/home.html'  # <app>/<model>_<viewtype>.html
    context_object_name = 'posts'
    ordering = ['-date_posted'] 

my home / urls.py:

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

my main / urls.py

urlpatterns=[
    path('signup/',views.signup,name='signup'),
    path('signin/',views.user_login, name='user_login'),
    path('signout/', views.user_logout, name='user_logout'),
    path('',views.main_page,name='main_page'),
    path('edit/', views.edit_profile, name='edit_profile'),
    path('', include('django.contrib.auth.urls')),
]

my main / views.py:

def main_page(request):
    return render(request,'main/user_login.html')

@login_required
def user_logout(request):
    logout(request)
    return redirect('main:main_page')

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=user.username, password=raw_password)
            return redirect('main:main_page')
    else:
        form = SignUpForm()
    return render(request, 'main/signup.html', {'form': form})

def user_login(request):
    if request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            return redirect(reverse('home:home'))
        else:
            messages.error(request,'Sorry, the username or password you entered is not valid please try again.')
            return HttpResponseRedirect('/')
    else:
        form=AuthenticationForm()
        return render(request, 'main/user_login.html', {"form":form})

int my settings.py У меня есть только:

LOGIN_URL = 'main:main_page'

Я много работал над этим и не могу найти, как решить эту проблему. Заранее спасибо!

1 Ответ

0 голосов
/ 21 марта 2020

Я думаю, аутентификация не удалась. Однако вот фрагмент кода, который вы можете попробовать.

from django.shortcuts import render,redirect
from django.contrib.auth import login,logout
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth.decorators import login_required

def loginView(request):
    if request.method == 'POST':
        # Authentication form is provided by django, it will parse username and password
        # in the post request
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return redirect('home:home')
    else:
        form = AuthenticationForm()

    return render(request, 'main/user_login.html', context={'form': form})

@login_required
def logout_request(request):
    logout(request)
    return redirect('home:user_login')

В файле settings.py убедитесь, что установлены следующие свойства:

LOGIN_URL = reverse_lazy('home:user_login')
LOGIN_REDIRECT_URL = reverse_lazy('home:home')
LOGOUT_REDIRECT_URL = reverse_lazy('home:user_login')

Примечание. Если вы используете пользовательский пользовательский (другой чем модель пользователя по умолчанию, предоставленная djna go), затем убедитесь, что у вас есть следующее свойство в файле settings.py, иначе AuthenticationForm не будет работать.

AUTH_USER_MODEL = 'AppName.YourCustomUserModel'
...