Django:使用视图处理表单的标准方法是什么?

时间:2015-08-10 13:32:25

标签: django django-forms django-views

用户正在profile/userB/查看其他用户的个人资料,然后点击添加好友按钮。

这会将包含两个用户的POST表单提交到create应用(friends)中的friends/create/视图,该视图处理数据,创建新{{1}对象并将其保存在数据库中。 Flash消息被设置为反馈,用户发现自己重新开始Friend

用户永远不会看到profile/userB/

这感觉非常明显,我经常使用CakePHP做到这一点,但我在Django中无法想象这一点。我试图将forms.py分开,并将表单周围的模板分开(例如,“添加朋友”模板可以包含在各个位置,包括表单和提交,如上所述)。我认为这是正确的方法吗?

由于

1 个答案:

答案 0 :(得分:0)

听起来你甚至不需要表格,也不需要提交POST。不要将您的网址定义为friend/create/,而是使用以下内容:

url(r'^create-friendship/(?P<user_id>\d+)/$', 'create_friendship', name='create-friendship'),

然后您将Add Friend定义为链接(但您应该将其设置为用户体验按钮),大致如下:

<a href="{% url 'app:create-friendship' userB.id %}?from={{ request.path|urlencode }}">Add friend</a>

请注意,我在链接末尾添加了GET参数from,这是您传递给view方法的当前网址。然后在您的创建视图中:

def create_friendship(user_id):
    # logic to build your friendship relationship between user_id and request.user
    if request.GET.get('from'):
        return HttpResponseRedirect(request.GET.get('from'))
    else:
        # return to some other urls

没有&#34;内置&#34;在django中这样做的方法,但是一旦你更好地理解了框架,就应该变得明显。

ps:要在django模板中访问request变量,您必须启用模板处理器,在设置中将以下内容添加到TEMPLATE_CONTEXT_PROCESSOR:

TEMPLATE_CONTEXT_PROCESSORS = (
  # ...
  'django.core.context_processors.request',
  # ...
)