Django身份验证:用户在注册前创建对象

时间:2013-02-25 01:54:03

标签: django django-models django-authentication

我正在一个人们创建文章的Django网站上工作。我希望人们能够在注册过程中创建一篇文章。以下是步骤:

  1. 用户点击“创建文章”而未注册或登录。
  2. 用户被定向到“创建文章”页面,该页面显示用于创建文章的表单。
  3. 点击“创建文章”表单上的“提交”按钮后,用户将被重定向到注册/登录页面。
  4. 在注册过程或登录后,文章将保存在用户的ID下。
  5. 我是Django的新手,所以就我所关注的问题而言,这里有一些并发症:

    • 在登录过程之前,我是否使用AnonymousUser作为作者保存对象?如何再次找到该对象,以便在用户登录或注册后将其保存到用户? AnonymousUser对象中是否有任何类型的唯一标识符?

    • 我是否应该使用URL在注册过程中传递对象,直到注册完成(然后保存)?如何做到这一点?

2 个答案:

答案 0 :(得分:2)

有几种方法可以做你想做的事情。我会从创建文章表单中排除用户,并将user设置为blank = True,null = True。

在您创建用户之前,是否只是将文章保留在会话中,或者将其保留到数据库并在之后分配用户,这取决于您。

将其保留在会话中的一个好处是,如果用户放弃注册过程,则您在数据库中没有记录。我建议采用这种方式,因为它很容易做到,如果用户放弃会话,你不必有任何逻辑来清理你的数据库。

要专门回答有关匿名用户的问题...否,匿名用户没有唯一标识符。您可以在Django中使用会话来在视图之间保留对象。

答案 1 :(得分:1)

“我是否应该在注册过程中使用URL传递对象直到注册(然后保存)?如何做到这一点?”

您提出的上述建议是更好的解决方案,但不要将其传递给网址。有两种方法可以成功地做到这一点。

  1. 您可以通过会话变量传递对象,这样任何人都不会注意到它而不是将其传递给url。
  2. 您可以确定必须通过其IP地址获取哪个对象。