Почему информация пользователя не добавляет базу данных mysql с помощью django? - PullRequest
0 голосов
/ 22 октября 2019

У меня проблемы с проектом django-ajax, в котором всякий раз, когда я пытаюсь зарегистрировать пользователя, он не добавляет информацию о пользователе в базу данных mysql, а вместо этого я получаю ее в терминале при запуске сервера:

Not Found: /sign-up/ajax-sign-up 
[Time of request] " POST /sign-up/ajax-sign-up HTTP/1.1" 404 2430

Кроме того, я получаю эту ошибку, которая не исчезает в VScode относительно класса User на forms.py:

Class 'User' has no 'objects' member 

Я добавил надстройку pylint для удаленияесли предположить, что это ошибка класса «Пользователь», это ошибка, и я переписал 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!")

views. скрипт py:

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)

и urls.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

и пользовательинформация не добавляется в базу данных. Информация о пользователе должна быть обновлена, и я уверен, что я правильно звоню на занятия.

Я очень ценю ваше время и внимание.

1 Ответ

0 голосов
/ 22 октября 2019

Я не могу понять, что вы делаете в этом классе Ajax, но этот класс, похоже, все равно не используется;вместо этого у вас есть AjaxSignup и AjaxLogin, которые вы не показали.

Но, тем не менее, ваша ошибка даже не связана ни с одним из этого кода. Как ясно сказано в сообщении, вы запрашиваете URL, который не существует. Вы запрашиваете «/ sign-up / ajax-sign-up», но ваш URL для регистрации просто «/ajax-sign-up".

(А предупреждение от pylint - это просто предупреждение;Вы должны игнорировать это. Но, опять же, вы даже не используете User нигде в показанном вами коде.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...