我正在尝试将表单数据保存到数据库

时间:2019-05-01 17:50:21

标签: django python-3.x django-models django-forms

我正在尝试将用户表单数据保存到数据库。我以这种方式尝试过,但它并没有保存任何内容,因此我没有任何价值。

views.py

from django.shortcuts import render, redirect

from .forms import Signup

from .models import Signup

def Sign_up(request):
username = request.POST.get('username')
mobile_number = request.POST.get('mobile_number')
email = request.POST.get('email')
password = request.POST.get('password')
address = request.POST.get('address')
print("Hello form is submitted")
print(username)
print(mobile_number)
print(email)
print(password)
print(address)
post = Signup(username= username, mobile_number=mobile_number,email=email, 
               password=password, address=address)
post.save()
return render(request, 'sign_up/sign_up.html',{})

models.py

from django.db import models

class Signup(models.Model):

username = models.CharField(max_length=300, default='SOME STRING', 
                              blank=True, null=True)
mobile_number = models.CharField(max_length=12, blank=True, null=True)
email = models.EmailField(max_length=50, blank=True, null=True)
password = models.CharField(max_length=50, blank=True, null=True)
address = models. CharField(max_length=100, blank=True, null=True)
print("Hi")

def __str__(self):
    return self.username or ''

def __str__(self):
    return self.mobile_number or ''

def __str__(self):
    return self.email or ''

def __str__(self):
    return self.password or ''

def __str__(self):
    return self.address or ''

forms.py

from django import forms

from .models import Signup

class SignupForm(forms.Form):

username = forms.CharField(max_length=30, required=True)
mobile_number = forms.CharField(max_length=12)
email = forms.EmailField(max_length=50, required=True)
password = forms.CharField(max_length=50, required=True)
address = forms.CharField(max_length=100)

我越来越喜欢

Django 2.2版,使用设置“ project.settings”

http://127.0.0.1:8000/启动开发服务器

使用CTRL-BREAK退出服务器。

您好表格已提交

没有

没有

没有

没有

没有

[01 / May / 2019 22:39:18]“ GET / signup /?HTTP / 1.1” 200 3360

2 个答案:

答案 0 :(得分:0)

您以错误的方式创建了Signup对象,请按照以下方式创建它:

您可以像这样创建模型表单:

class SignupForm(forms.ModelForm):
    class Meta:
        model = Signup
        fields = ('username', )#pass fields here 

在您的视图中,您将获得用户输入的值,如下所示:

formToSave = SignupForm(request.POST,request.FILES)
       if formToSave.is_valid():
         product = formToSave.save()

但是,如果您不想使用模型表单,则可以创建对象Signup,然后照原样保存它,但是请确保在创建对象之前,您已经在视图中获取了所有表单值通过打印它们(就像您已经在做的那样)

post = Signup.objects.create(username= username, mobile_number=mobile_number,email=email, 
                   password=password, address=address)

然后保存

post.save()

答案 1 :(得分:0)

如果在生产中使用此模型,请小心。

存储非哈希密码是一种非常糟糕的做法。

我认为您正在尝试重新发明轮子。

有几种方法可以在django中管理用户模型。 如果您决定创建自己的用户系统,请先阅读以下内容: https://docs.djangoproject.com/en/2.2/topics/auth/customizing/

扩展现有的用户模型

有两种方法可以扩展默认的用户模型而不替换您自己的模型。如果您需要进行的更改纯粹是行为性的,并且不需要对数据库中存储的内容进行任何更改,则可以基于用户创建代理模型。这允许使用代理模型提供的任何功能,包括默认排序,自定义管理器或自定义模型方法。

如果您希望存储与用户有关的信息,则可以对包含其他信息字段的模型使用OneToOneField。这种一对一模型通常称为配置文件模型,因为它可能存储有关站点用户的与身份验证无关的信息。例如,您可以创建一个Employee模型:

from django.contrib.auth.models import User

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    department = models.CharField(max_length=100)

在启动项目时使用自定义用户模型

如果您要开始一个新项目,则即使默认用户模型足以满足您的要求,也强烈建议您设置自定义用户模型。此模型的行为与默认用户模型相同,但是将来如有需要,您可以对其进行自定义:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

不要忘记将AUTH_USER_MODEL指向它。在创建任何迁移或首次运行manage.py迁移之前,请执行此操作。

还要在应用程序的admin.py中注册模型

更多文档

指定自定义用户模型

  

使用自定义用户模型启动项目时,请停止考虑   如果这是您项目的正确选择。

     

将所有与用户相关的信息保留在一个模型中,无需   附加或更复杂的数据库查询以检索相关   楷模。另一方面,它可能更适合存放   模型中与您的应用有关的特定于应用的用户信息   自定义用户模型。这样,每个应用程序都可以指定自己的用户数据   需求而不会潜在地冲突或打破假设   通过其他应用。这也意味着您将保持用户模型为   尽可能简单,着重于身份验证,并遵循   Django希望自定义用户模型能够满足最低要求。

     

如果您使用默认的身份验证后端,则您的模型必须   有一个唯一的字段可用于识别   目的。这可以是用户名,电子邮件地址或其他任何名称   唯一属性。如果您使用的是非唯一的用户名字段,   可以支持它的自定义身份验证后端。

     

构造兼容的自定义用户模型的最简单方法是   从AbstractBaseUser继承。 AbstractBaseUser提供了核心   用户模型的实现,包括哈希密码和   令牌化密码重置。然后,您必须提供一些密钥   实施细节

作为参考,这里是有关用户身份验证的文档页面:https://docs.djangoproject.com/en/2.2/topics/auth/

如果要选择默认的django用户系统:https://docs.djangoproject.com/en/2.2/topics/auth/default/以及有关默认用户api的更多信息:https://docs.djangoproject.com/en/2.2/ref/contrib/auth/