Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不是';是否使用django将用户信息附加到mysql数据库?_Python_Mysql_Django - Fatal编程技术网

Python 为什么不是';是否使用django将用户信息附加到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'

我遇到了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' 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')解决了这个问题。这注册了用户信息并修复了问题。我非常感谢你的帮助,感谢你抽出时间。