我正在学习有关用户身份验证和授权的Django课程。但是关键是我在这里不太了解form_valid()方法:
class ArticleCreateView(CreateView):
model = Article
template_name = 'article_new.html'
fields = ('title', 'body') # new
def form_valid(self, form): # new
form.instance.author = self.request.user
return super().form_valid(form)
我不知道此方法返回什么。
谢谢
答案 0 :(得分:1)
在将正确的数据输入表单并且表单已成功验证且没有任何错误时,将调用此方法。您可以在此处处理成功后的逻辑,例如向用户发送通知电子邮件,重定向到“谢谢”页面等。
答案 1 :(得分:0)
感谢回答这个问题的人。
顺便说一下,这个例子来自这本书:Django for Beginners 3.1 使用 Python 和 Django 构建网站,作者 William S. Vincent
我也想知道这种方法发生了什么。所以,我打印了 变量。
print(f"form type: {type(form)}")
结果:
form type: <class 'django.forms.widgets.ArticleForm'>
及以下;是的,这确实是我填写的表格内容。
print(f"form: {form}")
form:
<tr>
<th>
<label for="id_title">Title:</label>
</th>
<td>
<input type="text" name="title" value="This is the title for this article" maxlength="255" required id="id_title">
</td>
</tr>
<tr>
<th>
<label for="id_body">Body:</label>
</th>
<td>
<textarea name="body" cols="40" rows="10" required id="id_body">And, this is the contents of this article,...blah, blah, blah.</textarea>
</td>
</tr>
在这里,我们将用户重定向到这个新创建的文章的特定页面。在此示例中,文章是已创建的第 8 篇文章。 status_code=302 是 URL 重定向
print(f"response type: {type(response)}")
print(f"response: {response}")
结果如下:
response type: <class 'django.http.response.HttpResponseRedirect'>
response: <HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/articles/8/">
当我查看重定向页面上的结果时,我可以看到 author 确实被分配了当前用户的值。因此,此方法负责将当前用户分配给作者字段。在表单中输入数据时无需让用户填写。
如果您转到 GitHub django/django 并在此存储库中搜索 form_valid
,以下链接将包含有关如何使用 form_valid
的各种示例。