2013-02-25 159 views
2

我正在Django网站上创建文章。我希望人们能够创建一篇文章作为注册过程的一部分。下面是步骤:Django身份验证:用户在注册前创建对象

  1. 用户点击“创建文章”未经注册或登录
  2. 用户被定向到“创建文章”页面显示的形式创建的文章。
  3. 点击“创建文章”表单上的“提交”按钮后,用户被重定向到注册/登录页面。
  4. 注册过程或登录后,文章将保存在用户的ID下。

我很新的Django的,所以这里有并发症,到目前为止我而言:

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

  • 我应该通过注册过程使用URL传递对象,直到注册发生(然后保存它)?如何做到这一点?

回答

2

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

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

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

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

1

“我应该使用URL通过注册过程来传递对象,直到注册发生(然后保存它)?如何做到这一点?”

上面的建议,你已经是更好的解决方案,但不要传递给url。有两种方法可以成功地做到这一点。

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