我正在尝试将用户表单数据保存到数据库。我以这种方式尝试过,但它并没有保存任何内容,因此我没有任何价值。
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',{})
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 ''
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
答案 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/