我正在从旧的PHP / apache服务器迁移到Django。我对模特形式'。
感到有点难过据我所知,"模型"是我的网站/服务器中持久性元素的抽象 - 特别是这是物理存储的东西,比如在数据库中,并定义数据库中的字段(读取列)。
我开始移动网站的身份验证部分,并发现模型,特别是用户模型(我做了一个空的用户继承AbstractUser以防万一我需要扩展的东西)。现在我想创建一个简单的两个字段表单来验证登录。
表格:
即使是'用户名'需要在模型表格中重新定义。所以我的问题:
如果模型表格与相关模型之间存在更深层次的关系,我也想知道。
答案 0 :(得分:1)
简单的django形式和模型形式有很大不同。
class ArticleForm(ModelForm):
class Meta:
model = Article
fields = ['pub_date', 'headline', 'content', 'reporter']
上面的示例说明您不必在此处编写任何表单字段。模型表单本身将创建一个基于模型中提供的属性的表单(本例中为“文章”)。
如果您创建一个简单的django表单,那么它将类似于:
class ArticleForm(forms.Form):
some_field = forms.CharField(some_attrs)
...
django用户模型为您提供身份验证所需的一切。当您只想创建用户import 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")
用户名和密码将来自您的帖子请求。
如果要扩展默认的Django用户模型,可以在扩展模型中将django用户模型用作onetoonefield
。
class AppUser(models.Model):
user = models.OneToOneField(User)
... # other custom fields