tmpbook / django-with-vuejs

Fast and clear in DevOps.
MIT License
423 stars 108 forks source link

请问用这种方式搭建的环境如何创建上传文件表单与django交互。 #7

Closed ssfdust closed 7 years ago

ssfdust commented 7 years ago

因为页面内容全部是通过vue来写的,但是在vue中是没法写{{form}}的。所以没法使用django的forms模块。那该怎么办呢。

tmpbook commented 7 years ago

@ssfdust django的forms模块设计结合模板来用很高效的,而我们现在已经摒弃后端模板渲染这种方式,变成前后端分离了,forms模板的部分功能比如validate之类应该也可以用吧,你多看看文档,比如: application/x-www-form-urlencoded是什么原理,

  1. 如何使用django的form类
  2. https://docs.djangoproject.com/en/1.11/ref/forms/api/
    >>> data = {'subject': 'hello',
    ...         'message': 'Hi there',
    ...         'sender': 'foo@example.com',
    ...         'cc_myself': True}
    >>> f = ContactForm(data)
TrinityHC commented 7 years ago

如果用django rest framework 写的api,前端post表单的时候crsftoken怎么解决呢?

ssfdust commented 7 years ago

@hchen1202 https://github.com/tmpbook/django-with-vuejs/issues/3

tmpbook commented 7 years ago

@hchen1202 @ssfdust Django 提供了一段js来生成csrftoken,你可以生成然后加到表单中,比禁用掉更完美,我找找:

// using jQuery
function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');

地址

ssfdust commented 7 years ago

问题已经解决。谢谢。