Django Session, Login and Signup

31 Views Asked by At

This is my view module

def home(request):
    return render(request, 'rescues_site/home_page.html')

# @login_required
def user_home(request):
    if request.method == 'POST':
        username = request.session.get('username')
        context = {
            'username': username
        }
        return render(request, 'rescues_site/home_page.html', context)

def login(request):
    if request.method == 'GET':
        return render(request, 'registration/login.html')
    
    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 and user.is_active and user.is_authenticated:
            login(request, user)
            request.session['username'] = user.username
            return redirect('user_home')
        else:
            return render(request, 'registration/login.html')

@transaction.atomic
def sign_up(request):
    if request.method == 'GET':
        return render(request, 'registration/sign_up.html')
    
    if request.method == 'POST':
        error = []

        first_name = request.POST.get('first_name')
        last_name = request.POST.get('last_name')
        address = request.POST.get('address')
        suburb = request.POST.get('suburb')
        postcode = request.POST.get('postcode')
        email = request.POST.get('email')
        phone_number = request.POST.get('phone_number', None)
        password = make_password(request.POST.get('password'))

        try:
            user = CustomUser.objects.create(username = email, 
                                             first_name = first_name, 
                                             last_name = last_name,
                                             address = address,
                                             suburb = suburb,
                                             postcode = postcode,
                                             phone_number = phone_number, 
                                             password = password)
            request.session['username'] = user.username
            return redirect('user_home')

I tried to login the user and redirect the user to the home page with their cresidentials but what I have is a POST request in the terminal and it take me nowhere.

I'm still new to Django and Python. Thank you for your time!

1

There are 1 best solutions below

0
Hashem On

Maybe you should add in your urls.py a name for redirect url, where in your case is user_home if you did not added already

ex: accounts/ login/ [name='login']

or you are missing LOGIN_REDIRECT_URL = '/' in settings

So if you can provide more info it will be better and I suggest for better understanding and reading more about how Django permissions and authentication works: Django Tutorial Part 8: User authentication and permissions - Learn web development | MDN