I’m trying to register a user but the page refreshes instead of submitting the data.
At the initial stage of my project, it was working properly but when I added some more models and form it’s not working and tried to register it stopped working.
and it also doesn’t throw any errors
views.py
JavaScript
x
108
108
1
from django.shortcuts import render
2
from django.contrib.auth import authenticate,login,logout
3
from .models import *
4
from django.http import HttpResponseRedirect
5
from django.urls import reverse
6
from .form import *
7
from django.db import IntegrityError
8
from django.contrib.auth.decorators import login_required
9
from django.contrib import messages
10
# Create your views here.
11
12
def index(request):
13
if not request.user.is_authenticated:
14
message = f"please sign in"
15
else :
16
message = f"signed in as {request.user}"
17
return render(request, "auctions/index.html",{
18
"listings": Listings.objects.all(),
19
"message": message
20
})
21
22
def login_view(request):
23
if request.method == "POST":
24
form = loginForm()
25
email = request.POST["email"]
26
password = request.POST["password"]
27
user = authenticate(request,username=email,password=password)
28
29
if user is not None:
30
login(request,user)
31
return HttpResponseRedirect(reverse('index'))
32
else:
33
return render(request, "auctions/login.html",{
34
"form": form ,
35
"message": "username/password not valid"
36
})
37
return render(request, "auctions/login.html",{
38
"form": loginForm()
39
})
40
41
def logout_view(request):
42
logout(request)
43
return HttpResponseRedirect(reverse('index'))
44
45
def register(request):
46
if request.POST == "POST":
47
form = registerForm()
48
email = request.POST["email"]
49
50
# check passwords are same
51
password = request.POST["password"]
52
confirmation = request.POST["id_confirmation"]
53
54
if password != confirmation:
55
return render (request, "auctions/register.html",{
56
"form": form,
57
"message": "Passwords does not match"
58
})
59
60
# Attempt to create new user
61
try:
62
user = myUser.objects.create_user(email,password)
63
user.save()
64
except IntegrityError:
65
return render(request, "auctions/register.html", {
66
"form":form,
67
"message": "Username is already taken"
68
})
69
70
login(request,user)
71
return HttpResponseRedirect(reverse('index'))
72
73
return render(request, "auctions/register.html", {
74
"form": registerForm()
75
})
76
77
@login_required(login_url='login')
78
def createListing(request):
79
80
form = createListingForm(request.POST or None, request.FILES or None)
81
82
if request.method == "POST":
83
84
if form.is_valid():
85
obj = form.save(commit=False)
86
obj.listed_by = request.user
87
obj.save()
88
messages.success(request,"Creation successful")
89
return HttpResponseRedirect(reverse('index'))
90
91
return render(request, "auctions/create.html", {
92
"form": form
93
})
94
95
96
def itemPage(request,listing_id):
97
return render(request, "auctions/item.html", {
98
"item" : Listings.objects.get(pk= listing_id)
99
})
100
101
# still working on it
102
@login_required(login_url='login')
103
def bid(request):
104
if request.method == "POST":
105
new_bid = request.POST["new_bid"]
106
107
return HttpResponseRedirect('itemPage')
108
models.py
JavaScript
1
71
71
1
from django.db import models
2
from django.contrib.auth.models import AbstractUser,BaseUserManager
3
from django.utils.translation import ugettext_lazy as _
4
from django.conf import settings
5
6
# Create your models here.
7
class myUserManager(BaseUserManager):
8
"""
9
custom user model manager where email is unique indentifiers for authenticaton
10
instead of usernames.
11
"""
12
13
def create_user(self, email, password, **extra_fields):
14
"""
15
Create and save a User with the given email and password.
16
"""
17
if not email:
18
raise ValueError(_('The Email must be set'))
19
email = self.normalize_email(email)
20
user = self.model(email=email, **extra_fields)
21
user.set_password(password)
22
user.save()
23
24
return user
25
26
def create_superuser(self, email, password, **extra_fields):
27
28
"""
29
Create and save a SuperUser with the given email and password.
30
"""
31
32
extra_fields.setdefault('is_staff',True)
33
extra_fields.setdefault('is_superuser',True)
34
extra_fields.setdefault('is_active',True)
35
36
if extra_fields.get('is_staff') is not True:
37
raise ValueError(_('Superuser must have is_staff= True'))
38
if extra_fields.get('is_superuser') is not True:
39
raise ValueError(_('Superuser must have is_superuser=True.'))
40
return self.create_user(email,password, **extra_fields)
41
42
class myUser(AbstractUser):
43
username = None
44
email = models.EmailField(_('email address'), unique=True)
45
46
USERNAME_FIELD = 'email'
47
REQUIRED_FIELDS = []
48
49
objects = myUserManager()
50
51
def __str__(self):
52
return f'{self.email}'
53
54
class Listings(models.Model):
55
listing_name = models.CharField(max_length=50)
56
price = models.IntegerField(default=1)
57
date_listed = models.DateTimeField(auto_now_add=True)
58
date_updated = models.DateTimeField(auto_now=True)
59
item_image = models.ImageField()
60
description = models.TextField(max_length=200, default="Description Not Available")
61
listed_by = models.ForeignKey(myUser,on_delete=models.CASCADE, default=1,null=True)
62
63
def __str__(self):
64
return f'{self.listing_name}'
65
66
# added later not complete
67
class Bid(models.Model):
68
item_name = models.ForeignKey(Listings,on_delete=models.CASCADE)
69
bid_by_user = models.ForeignKey(myUser,on_delete=models.CASCADE)
70
new_bid = models.IntegerField()
71
forms.py
JavaScript
1
41
41
1
from django.forms import ModelForm
2
from django.db import models
3
from django import forms
4
from django.forms import Form,PasswordInput
5
from .models import *
6
from django.contrib.auth.mixins import LoginRequiredMixin
7
8
class loginForm(forms.ModelForm):
9
10
class Meta:
11
model = myUser
12
13
fields = ['email', 'password']
14
15
widgets = {
16
# telling Django your password field in the mode is a password input on the template
17
'password': forms.PasswordInput()
18
}
19
20
class registerForm(forms.ModelForm):
21
confirmation = forms.CharField()
22
23
class Meta:
24
model = myUser
25
26
fields = ['email', 'password']
27
28
widgets = {
29
30
# telling Django your password field in the mode is a password input on the template
31
'password': forms.PasswordInput()
32
33
}
34
35
class createListingForm(forms.ModelForm):
36
37
class Meta:
38
model = Listings
39
40
fields = ['listing_name', 'price', 'item_image', 'description']
41
register.html
JavaScript
1
34
34
1
{% load static %}
2
3
<!DOCTYPE html>
4
<html lang="en">
5
<head>
6
<meta charset="UTF-8">
7
<meta http-equiv="X-UA-Compatible" content="IE=edge">
8
<meta name="viewport" content="width=device-width, initial-scale=1.0">
9
<title>Login</title>
10
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl" crossorigin="anonymous">
11
12
</head>
13
<body>
14
<div class="container">
15
<div class="login_form">
16
<strong class="tilte">Register</strong>
17
<form action="{% url 'register' %}" method="POST">
18
19
{% if message %}
20
<div >
21
{{message}}
22
</div>
23
{% endif %}
24
25
{% csrf_token %}
26
{{ form.as_p }}
27
<input class="btn btn-primary" type="submit" value="Register">
28
<small>If already registered click here to <a href="{% url 'login' %}">Login</a></small>
29
</form>
30
</div>
31
</div>
32
</body>
33
</html>
34
urls.py
JavaScript
1
10
10
1
urlpatterns = [
2
path('', views.index, name='index'),
3
path('login/', views.login_view, name='login'),
4
path('logout/', views.logout_view, name='logout'),
5
path('register/', views.register, name='register'),
6
path('create_listing/', views.createListing, name='create'),
7
path('item/<int:listing_id>', views.itemPage, name='item'),
8
path('bid/', views.bid, name='bid')
9
]
10
I would also like to request some other suggestions on my code. Thank you.
Advertisement
Answer
Well, it’s a silly mistake. I think by mistake you put request.POST
inplace of request.method
.
In your register view change
JavaScript
1
2
1
if request.POST == "POST":
2
to
JavaScript
1
2
1
if request.method == "POST":
2