Python 为什么不是';是否使用django将用户信息附加到mysql数据库?
我遇到了django ajax项目的问题,在该项目中,每当我尝试注册一个用户时,它都不会将用户信息附加到mysql数据库,而是在我运行服务器时在终端中得到:Python 为什么不是';是否使用django将用户信息附加到mysql数据库?,python,mysql,django,Python,Mysql,Django,我遇到了django ajax项目的问题,在该项目中,每当我尝试注册一个用户时,它都不会将用户信息附加到mysql数据库,而是在我运行服务器时在终端中得到: Not Found: /sign-up/ajax-sign-up [Time of request] " POST /sign-up/ajax-sign-up HTTP/1.1" 404 2430 此外,我得到的这个错误在关于forms.py上的用户类的VScode上不会消失: Class 'User' has no 'objects'
Not Found: /sign-up/ajax-sign-up
[Time of request] " POST /sign-up/ajax-sign-up HTTP/1.1" 404 2430
此外,我得到的这个错误在关于forms.py上的用户类的VScode上不会消失:
Class 'User' has no 'objects' member
我已经添加了pylint插件来删除错误,假设类“User”错误是问题所在,我已经重写了views.py,但是没有任何效果
这是我的forms.py脚本:
from django import forms
from django.contrib.auth import authenticate
from django.db.models import F
from project.models import User
from django.contrib.auth.hashers import make_password, check_password
from urllib.request import urlopen
from random import randint
import json, re
class Ajax(forms.Form):
args = []
user = []
def __init__(self, *args, **kwargs):
self.args = args
if len(args) > 1:
self.user = args[1]
if self.user.id == None:
self.user = "NL"
def error(self, message):
return json.dumps({ "Status": "Error", "Message": message }, ensure_ascii=False)
def success(self, message):
return json.dumps({ "Status": "Success", "Message": message }, ensure_ascii=False)
def items(self, json):
return json
def output(self):
return self.validate()
class AjaxSignUp(Ajax):
def validate(self):
try:
self.username = self.args[0]["username"]
self.password = self.args[0]["password"]
self.email = self.args[0]["email"]
except Exception as e:
return self.error("Malformed request, did not process.")
if not re.match('^[a-zA-Z0-9_]+$', self.username):
return self.error("Invalid username, must be fit [a-zA-Z0-9_]")
if not re.match('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$', self.email):
return self.error("Invalid email syntax.")
if len(self.username) < 4 or len(self.username) > 20:
return self.error("Username must be between 3 and 20 characters long.")
if len(self.password) < 6 or len(self.password) > 32:
return self.error("Password must be between 6 and 32 characters long.")
if len(self.email) < 6 or len(self.email) > 140:
return self.error("Email must be between 6 and 32 characters long.")
if User.objects.filter(username=self.username).exists():
return self.error("Username already in use.")
if User.objects.filter(email=self.email).exists():
return self.error("Email address already in use.")
u = User(username=self.username, password=make_password(self.password), email=self.email)
u.save()
return self.success("Account Created!")
class AjaxLogin(Ajax):
def validate(self):
try:
self.password = self.args[0]["password"]
self.email = self.args[0]["email"]
except Exception as e:
return None, self.error("Malformed request, did not process.")
if not re.match('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$', self.email):
return None, self.error("Invalid email syntax.")
if len(self.password) < 6 or len(self.password) > 32:
return None, self.error("Password must be between 6 and 32 characters long.")
if len(self.email) < 6 or len(self.email) > 140:
return None, self.error("Email must be between 6 and 32 characters long.")
if not User.objects.filter(email=self.email).exists():
return None, self.error("Email or password is incorrect.")
if not check_password(self.password, User.objects.filter(email=self.email)[0].password):
return None, self.error("Email or password is incorrect.")
u = User.objects.filter(email=self.email)[0]
return u, self.success("User logged in!")
from django.shortcuts import render, redirect
from .models import User
from .forms import *
from django.contrib.auth import authenticate, login, logout as dlogout
def ajaxsignup(request):
ajax = AjaxSignUp(request.POST)
context = {'ajax_output': ajax.output() }
return render(request, 'ajax.html', context)
def ajaxlogin(request):
ajax = AjaxLogin(request.POST)
logged_in_user, output = ajax.validate()
if logged_in_user != None:
login(request, logged_in_user)
context = {'ajax_output': output}
return render(request, 'ajax.html', context)
def signup(request):
context = {}
return render(request, 'sign-up.html', context)
def index(request):
context = {}
return render(request, 'index.html', context)
和url.py:
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index),
path('sign-up/', views.signup),
path('ajax-sign-up', views.ajaxsignup),
path('ajax-login', views.ajaxlogin),
]
无论我尝试了什么,我都会继续出现以下错误:
Not Found: /sign-up/ajax-sign-up
[Time of request] " POST /sign-up/ajax-sign-up HTTP/1.1" 404 2430
并且用户信息不会附加到数据库中。应该更新用户信息,并且我确信我正确地调用了这些类
我非常感谢您的时间和考虑。我不明白您在Ajax类中做了什么,但该类似乎没有被使用;您有AjaxSignup和AjaxLogin,但没有显示 但是,您的错误甚至不是来自这些代码。正如消息明确指出的,您正在请求一个不存在的URL。您正在请求“/sign-up/ajax-sign-up”,但您的注册URL只是“/ajax-sign-up”
(pylint的警告只是一个警告;您应该忽略它。但是,同样,您甚至没有在显示的代码中的任何地方使用User。)抱歉,我更新/编辑了上面forms.py脚本中的其余代码。我试图调用AjaxSignup类来注册用户并更新数据库。也许html页面中的ajax有问题?我告诉过你问题所在:你发布到了错误的URL。有什么不清楚的?(虽然我无法想象为什么您编写了所有这些代码来绕过和复制Django表单已经做过的事情,但这不是问题所在。)我发现了问题所在。正如您在第一次回答中所说的,这不是一个不清楚的问题,错误不是来自我在问题中发布的代码,这就是为什么我认为它可能来自html文件中的ajax。不管怎样,你是正确的,我通过修改我发布的url.py代码中的urlpatterns到path('sign-up/ajax-sign',views.ajaxsignup')解决了这个问题。这注册了用户信息并修复了问题。我非常感谢你的帮助,感谢你抽出时间。