Django 项目卡在登录页面

问题描述 投票:0回答:1

我对 Django 很陌生,我正在尝试创建一个预订网站。我希望登录后它应该重定向到我的 booking.html 页面,但相反,我的登录页面总是一遍又一遍地返回登录页面

这是我的登录.html :

{% extends 'base.html' %}

{% block content %}
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'css/signin.css' %}">

<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

<!-- Bootstrap Bundle with Popper -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.bundle.min.js"></script>

<div class="row justify-content-center">
    <div class="col-md-4">
        <div class="login-container">
            {% if session.success %}
            <div class="alert alert-success alert-dismissible fade show" role="alert">
                {{ session.success }}
                <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
            </div>
            {% endif %}

            {% if session.loginError %}
            <div class="alert alert-danger alert-dismissible fade show" role="alert">
                {{ session.loginError }}
                <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
            </div>
            {% endif %}

            <div class="row justify-content-center">
                <div class="wow fadeInUp" data-wow-delay="0.1s">
                    <main class="form-signin">
                        <div class="wrapper">
                            <div class="logo">
                                <img src="{% static 'img/logo.png' %}">
                            </div>
                            <br>
                            <div class="text-center mt-4 name">
                                Login Dulu Yuk
                            </div>
                            <br>
                            <form id="loginForm" action="{% url 'login' %}" method="post">
                                {% csrf_token %}
                                <div class="p-3 mt-3">
                                    <div class="form-floating form-field d-flex align-items-center">
                                        <input type="text" name="username" class="form-control rounded {% if form.errors.username %}is-invalid{% endif %}" id="username" placeholder="Username" autofocus required>
                                        <label for="username">Username</label>
                                        {% if form.errors.username %}
                                        <div class="invalid-feedback">
                                            {{ form.errors.username }}
                                        </div>
                                        {% endif %}
                                    </div>
                                    
                                    <div class="form-floating form-field d-flex align-items-center">
                                        <input type="password" name="password" class="form-control rounded" id="password" placeholder="Password">
                                        <label for="password">Password</label>
                                    </div>
                                    <br>
                                    <button class="w-100 btn btn-lg btn-danger" type="submit">Login</button>
                                </div>
                            </form>
                            <small class="d-block text-center mt-3">Belum Register? <a id="registerLink" href="#">Register Sekarang!</a></small>
                        </div>
                    </main>
                </div>
            </div>
        </div>
    </div>
</div>

<script>
    $(document).ready(function() {
        $('#registerLink').click(function(e) {
            e.preventDefault();
            window.location.href = "{% url 'register' %}";
        });
    });
</script>
{% endblock %}

这是我的 urls.py :


    path('login/', LoginView.as_view(next_page='booking'), name='login'),
    

这是我的观点.py:

from django.shortcuts import render,redirect
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from mysalon.models import tbBooking
from mysalon.models import tbLayanan
from mysalon.forms import FormBooking, FormLayanan
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.conf import settings
from django.contrib.auth.forms import UserCreationForm
from mysalon.resource import BookingResource
from datetime import datetime
from django.urls import reverse
from django.shortcuts import get_object_or_404
from rest_framework import status
from rest_framework.decorators import api_view, permission_classes
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from django.shortcuts import render, redirect
from mysalon.forms import CustomUserCreationForm
from django.contrib.auth.models import Group
from django.http import JsonResponse
import random
import string
import twilio
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import authenticate, login
from mysalon.models import CustomUser
from django.contrib.auth import authenticate, login
from django.contrib import messages
from django.shortcuts import render, redirect
from mysalon.models import CustomUser

def index(request):
    now = datetime.now()
    return render(
    request, "index.html",
    {
    'title' : "Glory Salon Booking Online",
    'message1' : "Glory Salon Booking Online",
    'message2' : "Selamat Datang",
    'content' : " pada " + now.strftime("%A, %d %B, %Y at %X")
    }
    )
    
@login_required(login_url=settings.LOGIN_URL)
def booking(request):
    if request.POST:
        kata_kunci = request.POST['cari']
        bk = tbBooking.objects.filter(nama__icontains=kata_kunci)
        isi = {
        'bk' : bk,
}
    else:
        bk = tbBooking.objects.all()
        isi = {
        'bk' : bk
        }
    return render(request,'booking.html', isi)

@login_required(login_url=settings.LOGIN_URL)
def bookingadmin(request):
    if request.POST:
        kata_kunci = request.POST['cari']
        bk = tbBooking.objects.filter(nama__icontains=kata_kunci)
        isi = {
        'bk' : bk,
}
    else:
        bk = tbBooking.objects.all()
        isi = {
        'bk' : bk
        }
    return render(request,'bookingadmin.html', isi)

def about(request):

    return render(request,"about.html")

   
def layanan(request):
    if request.POST:
        kata_kunci = request.POST['cari']
        ly = tbLayanan.objects.filter(namalayanan__icontains=kata_kunci)
        isi = {
        'ly' : ly,
}
    else:
        ly = tbLayanan.objects.all()
        isi = {
        'ly' : ly
        }
    return render(request,'layanan.html', isi)

@login_required(login_url=settings.LOGIN_URL)    
def layananadmin(request):
    if request.POST:
        kata_kunci = request.POST['cari']
        ly = tbLayanan.objects.filter(namalayanan__icontains=kata_kunci)
        isi = {
        'ly' : ly,
}
    else:
        ly = tbLayanan.objects.all()
        isi = {
        'ly' : ly
        }
    return render(request,'layananadmin.html', isi)

def index_book(request):
    return render(request,'index_book.html')

@login_required(login_url=settings.LOGIN_URL)
def tambahbooking(request):
    if request.POST:
        form = FormBooking(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            form = FormBooking()
            pesan = "Selamat bookingan anda sudah tersimpan, silahkan tunggu konfirmasi dari kami"
            isi = {
            'form': form,
            'pesan': pesan,
            }
            return render(request,"tambahbooking.html", isi)
    else:
        form = FormBooking()
        isi = {
            'form' : form,  
            }
    return render(request, 'tambahbooking.html', isi)

@login_required(login_url=settings.LOGIN_URL)
def tambahlayanan(request):
    if request.POST:
        form = FormLayanan(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            form = FormLayanan()
            pesan = "Layanan sudah tersimpan"
            isi = {
            'form': form,
            'pesan': pesan,
            }
            return render(request,"tambahlayanan.html", isi)
    else:
        form = FormLayanan()
        isi = {
            'form' : form,  
            }
    return render(request, 'tambahlayanan.html', isi)

@login_required(login_url=settings.LOGIN_URL)
def ubahbooking(request, kode_id):
    bk = tbBooking.objects.get(kode = kode_id)
    template = "ubahbooking.html"
    if request.POST:
        form = FormBooking(request.POST, request.FILES, instance=bk)
        if form.is_valid():
            form.save()
            messages.success(request, "Data berhasil di-update")
            return redirect('ubahbooking', kode_id = kode_id)
    else:
        form = FormBooking(instance=bk)
        isi = {
        'form':form,
        'bk':bk,
        }
        return render(request,template,isi)

@login_required(login_url=settings.LOGIN_URL)
def ubahlayanan(request, namalayanan_id):
    ly = tbLayanan.objects.get(namalayanan = namalayanan_id)
    template = "ubahlayanan.html"
    if request.POST:
        form = FormLayanan(request.POST, request.FILES, instance=ly)
        if form.is_valid():
            form.save()
            messages.success(request, "Data berhasil di-update")
            return redirect('http://127.0.0.1:8000/layananadmin')
    else:
        form = FormLayanan(instance=ly)
        isi = {
        'form':form,
        'ly':ly,
        }
        return render(request,template,isi)


def hapusbooking(request, kode_id):
    bk = tbBooking.objects.filter(kode = kode_id)
    bk.delete()
    messages.success(request, "Data Berhasil dihapus!")
    return redirect('booking')

def hapuslayanan(request, namalayanan_id):
    ly = tbLayanan.objects.filter(namalayanan = namalayanan_id)
    ly.delete()
    messages.success(request, "Data Berhasil dihapus!")
    return redirect('layanan')


def register(request):
    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('login')  # Redirect to login page after successful registration
    else:
        form = CustomUserCreationForm()
    return render(request, 'register.html', {'form': form})

def registeradmin(request):
    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_staff = True  # Menjadikan user sebagai staff
            user.save()
            
            # Menambahkan user ke grup 'Admin' jika grup tersebut sudah ada
            try:
                admin_group = Group.objects.get(name='Admin')
            except Group.DoesNotExist:
                admin_group = Group.objects.create(name='Admin')
                pass
            
            # Menambahkan user ke grup 'Admin' jika grup tersebut sudah ada
            if admin_group:
                user.groups.add(admin_group)
                
            return redirect('login')  # Redirect to login page after successful registration
    else:
        form = CustomUserCreationForm()
    return render(request, 'registeradmin.html', {'form': form})

def registerowner(request):
    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_superuser = True
            user.is_staff = True# Menjadikan user sebagai staff
            user.save()
            
            # Menambahkan user ke grup 'Admin' jika grup tersebut sudah ada
            try:
                admin_group = Group.objects.get(name='Owner')
            except Group.DoesNotExist:
                admin_group = Group.objects.create(name='Owner')
                pass
            
            # Menambahkan user ke grup 'Admin' jika grup tersebut sudah ada
            if admin_group:
                user.groups.add(admin_group)
                
            return redirect('login')  # Redirect to login page after successful registration
    else:
        form = CustomUserCreationForm()
    return render(request, 'registerowner.html', {'form': form})

def export_xls(request):
    booking = BookingResource()
    dataset = booking.export()
    response = HttpResponse(dataset.xls, content_type = "application/vnd.ms-excel")

    response['content-disposition'] = 'attachment; filename=Laporan Booking Anda.xls'
    return response

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def delete_user(request, user_id):
    if not request.user.has_perm('auth.delete_user'):
        return Response({'error': 'You do not have permission to delete users.'}, status=status.HTTP_403_FORBIDDEN)

    # Delete user logic
    return Response({'success': 'User deleted successfully.'}, status=status.HTTP_200_OK)

这是我的settings.py:


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

LOGIN_REDIRECT_URL = 'booking/'

LOGIN_URL = 'login/'




最后这是我的 models.py :

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Group


class CustomUserManager(BaseUserManager):
    def create_user(self, email, username, password=None):
        if not email:
            raise ValueError('The Email field must be set')
        if not username:
            raise ValueError('The Username field must be set')
        email = self.normalize_email(email)
        user = self.model(email=email, username=username)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, username, password=None):
        user = self.create_user(email=email, username=username, password=password)
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)
        return user


class CustomUser(AbstractBaseUser):
    nama = models.CharField(max_length=50)
    alamat = models.TextField()
    nohp = models.CharField(max_length=15)
    email = models.EmailField(max_length=50, unique=True)
    username = models.CharField(max_length=50, unique=True)
    password = models.CharField(max_length=50)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    groups = models.ManyToManyField(Group, blank=True, related_name='custom_users')

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

    objects = CustomUserManager()

    def __str__(self):
        return self.email
    



class tbLayanan(models.Model):
    namalayanan = models.CharField(max_length=50)
    harga = models.IntegerField()

    def __str__(self):
        return self.namalayanan


class tbStatus(models.Model):
    namastatus = models.CharField(max_length=50)

    def __str__(self):
        return self.namastatus


class tbBooking(models.Model):
    kode = models.CharField(max_length=9, unique=True)
    nama = models.CharField(max_length=50, unique=True)
    namalayanan = models.ForeignKey(tbLayanan, on_delete=models.CASCADE, related_name='namalayanan_bookings')
    desk = models.TextField(blank=True, null=True)
    tanggal = models.DateTimeField(auto_now_add=True, null=True)
    waktu = models.TimeField()
    harga = models.ForeignKey(tbLayanan, on_delete=models.CASCADE, related_name='harga_bookings')
    namastatus = models.ForeignKey(tbStatus, on_delete=models.CASCADE, null=True)

    def __str__(self):
        return self.kode

请帮忙,我被困住了,不知道该怎么办

我想要的是登录后进入 booking.html 页面

django django-models django-views django-templates
1个回答
0
投票

你需要这样写登录路径 路径('登录/', LoginView.as_view(), name='登录'),

同时删除 / 。 LOGIN_REDIRECT_URL = '预订'

© www.soinside.com 2019 - 2024. All rights reserved.