小编Dav*_*win的帖子

Django Rest Framework,CSRF和Vue.js

我正在尝试使用Vue.js对我使用Django Rest Framework创建的REST Api执行一些POST方法.问题是,CSRF Failed: CSRF token missing or incorrect.我发帖时收到错误.但我可以看到csrf cookie,它被添加到标题中.

这是我的设置:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
        'rest_framework.permissions.DjangoModelPermissions'
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication'
    )
}
Run Code Online (Sandbox Code Playgroud)

这是我的Vue.js配置:

var csrftoken = Cookies.get('csrftoken');
Vue.http.headers.common['HTTP_X_CSRFTOKEN'] = csrftoken;
Run Code Online (Sandbox Code Playgroud)

这是发送的标题的相关部分:

Cookie:djdt=hide; tabstyle=raw-tab; sessionid=1gl533mrneudxw3l9l2vg0ja1yowwmeo; csrftoken=dN85bhztB1oVRov87BsUrWTM29Ff9sjn
Host:127.0.0.1:8000
HTTP_X_CSRFTOKEN:dN85bhztB1oVRov87BsUrWTM29Ff9sjn
Origin:http://127.0.0.1:8000
Referer:http://127.0.0.1:8000/agencies/6/add-profiles/
Run Code Online (Sandbox Code Playgroud)

如您所见,Cookie.csrf和HTTP_X_CSRFTOKEN标头匹配

我真的很难过.有什么建议?

django django-rest-framework vue.js

8
推荐指数
1
解决办法
5800
查看次数

让 Django、VUE、CORS 和 CSRF 与真实世界的例子一起工作

我真的被困住了。这就是我想要做的。

  1. 保持 CSRF 开启。- 请不要告诉我关掉它。
  2. 我有一个由 Django 和 Django Rest Framework 运行的 API 应用程序
  3. 我有一个由 Vue 运行的前端应用程序
  4. 我已经安装了 django-cors-headers 来管理 CORS

一切都很好本地化。一旦我将其投入生产,我就开始收到 CSRF 错误。这就是一切的运作方式。

我已经看到了从关闭 CSRF 到允许所有事情的所有答案。我想正确地做到这一点,而不仅仅是关闭和打开所有东西并最终导致安全漏洞。

所以,这就是我所拥有的。

已安装:django-cors-headers django-rest-framework drf-nested-routers ...等

我的 api 在 api.websitename.com 上运行,Vue.js 应用程序在 websitename.com 上运行。

GET 请求效果很好。OPTION 请求似乎有效。

任何有风险的请求都不起作用。

对于我的 CORS,我'corsheaders.middleware.CorsMiddleware',在其他MIDDLEWARE.

然后我的 CORS 设置是:

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = (
    '*.websitename.com',
)
Run Code Online (Sandbox Code Playgroud)

我的 CSRF 设置是:

CSRF_TRUSTED_ORIGINS = [
    "api.websitename.com",
]
Run Code Online (Sandbox Code Playgroud)

无论我如何使用这些,最终都会出现 CSRF 令牌错误。

我已经尝试过在我的 Vue App.vue 文件中做这样的事情的方法:

mounted () {
  this.getCSRFToken() …
Run Code Online (Sandbox Code Playgroud)

django django-csrf django-rest-framework vue.js django-cors-headers

7
推荐指数
2
解决办法
4680
查看次数

如何为django-taggit创建列表和详细信息视图?

我有一个相当简单的模型,使用Django Taggit进行标记.

一切都很好,但现在我想扩展一些功能,我有点困惑.

我想要的是两种观点.

一个显示系统中的所有标签.一个显示我的应用程序中具有特定标记的所有内容.

对我来说有意义的是为每个视图执行以下操作.

在views.py中为myapp

  1. 所有标签

    来自myapp.models导入App

    来自taggit.models导入标签

    class TagList(ListView):

    msgstr"""获取db中的所有标签"""

    queryset = Tag.objects.all()
    template_name = "myapp/TagList.html"
    paginate_by = 10
    
    Run Code Online (Sandbox Code Playgroud)
  2. 标签的所有内容

    来自myapp.models导入App

    来自taggit.models导入标签

    class TaggedList(ListView):"""获取标签的所有内容"""

    template_name = "myapp/TaggedList.html"
    
    def get_object(self):
        return get_list_or_404(App, tag__iexact=self.kwargs['tag'])
    
    Run Code Online (Sandbox Code Playgroud)

我是不是已经失去了理智,还是那么容易?顺便说一下,我正在使用泛型类视图.

谢谢您的帮助.戴夫

django django-views django-taggit

6
推荐指数
1
解决办法
1599
查看次数

完全丢失:Django Rest Framework中的序列化程序和更新中的多对多

我现在已经看了好几个小时了,我找不到解决办法.我只是没有得到它.

我有一个有很多孩子的父母.我创建了一个视图,允许我获取所有父母的孩子.现在我想结束该列表并使用新的子列表对父进行PATCH.我知道我需要编写一个自定义update方法,但我无法弄清楚如何使这个工作.

这是我的Child Serializer:

class ChildSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = models.Child
        fields = ('id', 'url', 'name',)
Run Code Online (Sandbox Code Playgroud)

这是我的父序列化器:

class ParentSerializer(serializers.HyperlinkedModelSerializer):
    children = ChildSerializer(many=True)

    class Meta:
        model = models.Parent
        fields = ('id', 'url', 'name', 'children',)

    def update(self, instance, validated_data):
        submitted_children = validated_data.get('children')
        if submitted_children:
            for child in submitted_children:
                child_instance = Child.objects.get(id=child.id)
                instance.children.add(child_instance)
        instance.save()
        return instance
Run Code Online (Sandbox Code Playgroud)

我对需要发生的事情的理解是......

  1. 获取提交的孩子 validated_data.pop('children')
  2. 循环遍历它们并将每一个添加到parent.children中
  3. 保存父模型

我可能在这里尝试了十几种不同的想法,但我似乎无法让它发挥作用.上面的代码不会更改children_set.

任何建议都非常受欢迎.

作为参考,我研究了以下内容:

http://www.django-rest-framework.org/api-guide/serializers/#saving-instances

http://www.django-rest-framework.org/api-guide/serializers/#writable-nested-representations

http://www.django-rest-framework.org/api-guide/serializers/#validation

django休息框架很多很多json写的

还有一堆,但我现在不记得了

更新:

[{"id":2,"url":" http://127.0.0.1:8000/api/v1/children/2 ","first_name":"Tom","last_name":"Jones","date_ofhirth ":"1969-03-14"}]

django django-rest-framework vue.js

5
推荐指数
1
解决办法
1093
查看次数

创建Django管理操作以复制记录

我想创建一个允许我创建记录副本的Django Admin Action.

继承人的用例.

管理员单击要复制的应用中记录旁边的复选框.管理员从管理操作下拉菜单中选择"重复".管理员点击进入.Django admin使用新的id创建重复记录.页面被刷新,新的重复与id一起添加.管理员点击新的重复记录并对其进行编辑.管理员点击保存.

我疯了还是这是一个非常直接的管理行动?

我一直在使用这些文档作为参考:http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/

我在想这样的事情:

在我的应用程序:

def duplicate(modeladmin, request, queryset):
    new = obj.id
    queryset.create(new)
    return None
duplicate.short_description = "Duplicate selected record"
Run Code Online (Sandbox Code Playgroud)

我知道那不对......但是我的想法很接近吗?

django django-admin

4
推荐指数
1
解决办法
6702
查看次数

如何在js循环中找到最后一项,以便我可以为其添加一个类?

我想建立一个清单.没问题.

for (i = 0; i < 7; i++) {
    $('#domid').append(variable.clone());
}
Run Code Online (Sandbox Code Playgroud)

如何获取列表中的最后一项(在本例中为i.7)并为其添加一个类?

for (i = 0; i < 7; i++) {
    $('#domid').append(variable.clone());

    if (i===7) {
        $('.domclass').addClass('last');
    };

}
Run Code Online (Sandbox Code Playgroud)

但那不行.这使得当计数器得到7时,所有.todo项都有类.

有关如何找到这个的任何建议?

谢谢!

javascript jquery

3
推荐指数
1
解决办法
5343
查看次数

如何在Django Generic Class View中编写基本的try/except

我想编写一个except子句,如果查询集中没有某些内容,则重定向用户.欢迎任何建议.我是一个Python noob,我得到的是这里的问题.

这是我目前的代码:

def get_queryset(self):
    try:
        var = Model.objects.filter(user=self.request.user, done=False)
    except:
        pass

    return var
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

def get_queryset(self):
    try:
        var = Model.objects.filter(user=self.request.user, done=False)
    except:
        redirect('add_view')

    return var
Run Code Online (Sandbox Code Playgroud)

django django-views

3
推荐指数
1
解决办法
3469
查看次数

使用基于通用类的视图编写Django详细信息视图

我知道这很简单,但我错过了一些东西.因为我永远记不住这一点,我希望这可以在这里记录解决方案.

我想要做的就是为URL中的对象传递PK并获取详细信息视图.

网址:

    url(regex=r'^(?P<pk>\d+)/$',
    view=AdventureDetail.as_view(),
    name='adventure_detail',
),
Run Code Online (Sandbox Code Playgroud)

视图:

class AdventureDetail(DetailView):
""" Get a time entry detail view """

    template_name = "adventure/AdventureDetail.html"

    def get_object(self):
        return get_object_or_404(Page)
Run Code Online (Sandbox Code Playgroud)

但我得到一个"多个对象返回错误"

MultipleObjectsReturned at/1/get()返回多个Page - 它返回5!查找参数为{}

这感觉真的很傻.它应该"正常工作",但我遗漏了一些明显的东西.

谢谢您的帮助.

django django-views

3
推荐指数
1
解决办法
1万
查看次数

使用Django Rest Framework和Angular从API端点发送电子邮件

一旦POST成功完成,我想发送电子邮件.似乎有意义的是,电子邮件将通过信号完成.我可以自己编写,如下所示:https://docs.djangoproject.com/en/1.6/topics/signals/#defining-and-sending-signals

但是,我无法弄清楚的是:

  1. Django Rest Framework是否支持信号(为什么不是它,它只是Django)
  2. 我该怎么发送自定义信号?发件人是什么?

建议欢迎.

还有,有人用Angular这样做吗?有没有一种简单的方法可以做到这一点,我没有看到?

django django-signals angularjs django-rest-framework

3
推荐指数
1
解决办法
4722
查看次数

使用Django Rest Framework使用自定义序列化程序CharField对该函数获取无效的关键字参数

我在这里基于Thinkster IO教程为应用程序编写自定义用户身份验证:https ://thinkster.io/django-angularjs-tutorial/

我已经对用户创建进行了调整,以使用确认的密码,然后进行保存。

我以为我一切都很好,但是我陷入了一个错误。

我相信这是问题代码。

def create(self, validated_data):
    # get the password or leave it alone
    password = validated_data.get('password', None)
    # get the confirm_password or leave it alone
    confirm_password = validated_data.get('confirm_password', None)

    # If the password exists AND the confirm password exists AND they eaqual each other
    if password and confirm_password and password == confirm_password:
        # create the object with valid form data
        return models.Account.objects.create(**validated_data)
Run Code Online (Sandbox Code Playgroud)

错误是: 'confirm_password' is an invalid keyword argument for this function

看起来好像是由我对API的看法触发的。为什么会这样呢?在我看来,这不应该成为问题,因为保存之前在视图中进行了检查,并且如果匹配则仅使用密码。

任何帮助都会很棒。

这是完整的序列化器 …

django angularjs django-rest-framework

2
推荐指数
1
解决办法
1710
查看次数