[英]Registration form refreshes after submitting instead of sending post request in django
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视图.py
from django.shortcuts import render
from django.contrib.auth import authenticate,login,logout
from .models import *
from django.http import HttpResponseRedirect
from django.urls import reverse
from .form import *
from django.db import IntegrityError
from django.contrib.auth.decorators import login_required
from django.contrib import messages
# Create your views here.
def index(request):
if not request.user.is_authenticated:
message = f"please sign in"
else :
message = f"signed in as {request.user}"
return render(request, "auctions/index.html",{
"listings": Listings.objects.all(),
"message": message
})
def login_view(request):
if request.method == "POST":
form = loginForm()
email = request.POST["email"]
password = request.POST["password"]
user = authenticate(request,username=email,password=password)
if user is not None:
login(request,user)
return HttpResponseRedirect(reverse('index'))
else:
return render(request, "auctions/login.html",{
"form": form ,
"message": "username/password not valid"
})
return render(request, "auctions/login.html",{
"form": loginForm()
})
def logout_view(request):
logout(request)
return HttpResponseRedirect(reverse('index'))
def register(request):
if request.POST == "POST":
form = registerForm()
email = request.POST["email"]
# check passwords are same
password = request.POST["password"]
confirmation = request.POST["id_confirmation"]
if password != confirmation:
return render (request, "auctions/register.html",{
"form": form,
"message": "Passwords does not match"
})
# Attempt to create new user
try:
user = myUser.objects.create_user(email,password)
user.save()
except IntegrityError:
return render(request, "auctions/register.html", {
"form":form,
"message": "Username is already taken"
})
login(request,user)
return HttpResponseRedirect(reverse('index'))
return render(request, "auctions/register.html", {
"form": registerForm()
})
@login_required(login_url='login')
def createListing(request):
form = createListingForm(request.POST or None, request.FILES or None)
if request.method == "POST":
if form.is_valid():
obj = form.save(commit=False)
obj.listed_by = request.user
obj.save()
messages.success(request,"Creation successful")
return HttpResponseRedirect(reverse('index'))
return render(request, "auctions/create.html", {
"form": form
})
def itemPage(request,listing_id):
return render(request, "auctions/item.html", {
"item" : Listings.objects.get(pk= listing_id)
})
# still working on it
@login_required(login_url='login')
def bid(request):
if request.method == "POST":
new_bid = request.POST["new_bid"]
return HttpResponseRedirect('itemPage')
models.py模型.py
from django.db import models
from django.contrib.auth.models import AbstractUser,BaseUserManager
from django.utils.translation import ugettext_lazy as _
from django.conf import settings
# Create your models here.
class myUserManager(BaseUserManager):
"""
custom user model manager where email is unique indentifiers for authenticaton
instead of usernames.
"""
def create_user(self, email, password, **extra_fields):
"""
Create and save a User with the given email and password.
"""
if not email:
raise ValueError(_('The Email must be set'))
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save()
return user
def create_superuser(self, email, password, **extra_fields):
"""
Create and save a SuperUser with the given email and password.
"""
extra_fields.setdefault('is_staff',True)
extra_fields.setdefault('is_superuser',True)
extra_fields.setdefault('is_active',True)
if extra_fields.get('is_staff') is not True:
raise ValueError(_('Superuser must have is_staff= True'))
if extra_fields.get('is_superuser') is not True:
raise ValueError(_('Superuser must have is_superuser=True.'))
return self.create_user(email,password, **extra_fields)
class myUser(AbstractUser):
username = None
email = models.EmailField(_('email address'), unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = myUserManager()
def __str__(self):
return f'{self.email}'
class Listings(models.Model):
listing_name = models.CharField(max_length=50)
price = models.IntegerField(default=1)
date_listed = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
item_image = models.ImageField()
description = models.TextField(max_length=200, default="Description Not Available")
listed_by = models.ForeignKey(myUser,on_delete=models.CASCADE, default=1,null=True)
def __str__(self):
return f'{self.listing_name}'
# added later not complete
class Bid(models.Model):
item_name = models.ForeignKey(Listings,on_delete=models.CASCADE)
bid_by_user = models.ForeignKey(myUser,on_delete=models.CASCADE)
new_bid = models.IntegerField()
forms.py forms.py
from django.forms import ModelForm
from django.db import models
from django import forms
from django.forms import Form,PasswordInput
from .models import *
from django.contrib.auth.mixins import LoginRequiredMixin
class loginForm(forms.ModelForm):
class Meta:
model = myUser
fields = ['email', 'password']
widgets = {
# telling Django your password field in the mode is a password input on the template
'password': forms.PasswordInput()
}
class registerForm(forms.ModelForm):
confirmation = forms.CharField()
class Meta:
model = myUser
fields = ['email', 'password']
widgets = {
# telling Django your password field in the mode is a password input on the template
'password': forms.PasswordInput()
}
class createListingForm(forms.ModelForm):
class Meta:
model = Listings
fields = ['listing_name', 'price', 'item_image', 'description']
register.html寄存器.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
<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">
</head>
<body>
<div class="container">
<div class="login_form">
<strong class="tilte">Register</strong>
<form action="{% url 'register' %}" method="POST">
{% if message %}
<div >
{{message}}
</div>
{% endif %}
{% csrf_token %}
{{ form.as_p }}
<input class="btn btn-primary" type="submit" value="Register">
<small>If already registered click here to <a href="{% url 'login' %}">Login</a></small>
</form>
</div>
</div>
</body>
</html>
urls.py网址.py
urlpatterns = [
path('', views.index, name='index'),
path('login/', views.login_view, name='login'),
path('logout/', views.logout_view, name='logout'),
path('register/', views.register, name='register'),
path('create_listing/', views.createListing, name='create'),
path('item/<int:listing_id>', views.itemPage, name='item'),
path('bid/', views.bid, name='bid')
]
I would also like to request some other suggestions on my code.我还想对我的代码提出一些其他建议。 Thank you.谢谢你。
Well, it's a silly mistake.嗯,这是一个愚蠢的错误。 I think by mistake you put request.POST
inplace of request.method
.我认为您错误地将request.POST
代替request.method
。
In your register view change在您的注册视图中更改
if request.POST == "POST":
to至
if request.method == "POST":
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.