模型与it之间的关系';Django中的s表单和用户身份验证
我正在将一些东西从旧的PHP/apache服务器迁移到Django。我有点被“模型形式”难住了 据我所知,“模型”是对我的网站/服务器中持久元素的抽象——具体来说,这是物理存储的东西,比如说在数据库中,并定义数据库中的字段(读取列) 我开始移动站点的身份验证部分,发现了模型,特别是用户模型(我让一个空用户继承AbstractUser,以防我需要扩展东西)。现在我想创建一个简单的两字段表单,以验证登录 表格:模型与it之间的关系';Django中的s表单和用户身份验证,django,Django,我正在将一些东西从旧的PHP/apache服务器迁移到Django。我有点被“模型形式”难住了 据我所知,“模型”是对我的网站/服务器中持久元素的抽象——具体来说,这是物理存储的东西,比如说在数据库中,并定义数据库中的字段(读取列) 我开始移动站点的身份验证部分,发现了模型,特别是用户模型(我让一个空用户继承AbstractUser,以防我需要扩展东西)。现在我想创建一个简单的两字段表单,以验证登录 表格: 用户名(默认情况下为用户字段) 密码(不是) 甚至“用户名”也需要在模型表单中重新定义。
如果模型表单和关联模型之间存在更深层的关系,我也想知道。简单django表单和模型表单有很大的区别
class ArticleForm(ModelForm):
class Meta:
model = Article
fields = ['pub_date', 'headline', 'content', 'reporter']
上面的例子说明了您不必在这里写任何表单字段。模型表单本身将创建一个基于模型中提供的属性的表单(本例中为“Article”)
如果您创建一个简单的django表单,那么它将类似于:
class ArticleForm(forms.Form):
some_field = forms.CharField(some_attrs)
...
django用户模型为您提供了身份验证所需的一切。当您想要创建用户时,只需导入django.contrib.auth.models.User并使用create方法创建对象。然后,当您想要对用户进行身份验证时,请使用authenticate
方法
from django.contrib.auth import authenticate, login
def user_login(request):
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
# after authentication login the user or set cookies or modify the session or some other action can be taken
return HttpResponse("Some response or use render for html page")
用户名和密码将来自您的post请求
如果要扩展默认的Django用户模型,可以在扩展模型中使用Django用户模型作为onetoonefield
class AppUser(models.Model):
user = models.OneToOneField(User)
... # other custom fields
密码也是用户模型的一个字段。用户模型已以哈希形式(sha-256)存储密码。你真的不需要做任何散列运算。@ArpitSolanki知道了,文档已经足够模糊了,我错过了,谢谢。如果可能的话,我希望能给出一个代码示例的答案。@ArpitSolanki还有,我现在正在渲染-密码字段正在渲染为类型文本输入。我知道如何使用“widgets”来改变这一点,但为什么这是默认值呢?因为对于django来说,它只是一个文本字段,没有什么比得上密码字段。您必须手动操作,谢谢,因此模型表单只需要指定字段名,并初始化字段本身。我缺少两件事:我在哪里认证?我在文档中看到了您发布的代码,但我显然不想在加载时进行身份验证,而是在提交表单时进行身份验证。由于我控制表单操作,我应该将POST请求定向到哪里?是否在那里获取表单/模型上下文?请参见编辑。为user_login方法创建一个url,并将其放入您的表单ActionThank,找到我需要的内容。