小编Joa*_*eth的帖子

如何在Django REST Framework中实现资源层次结构(例如/ parents/<id>/children)

我在Django REST Framework网站的教程中找不到任何关于如何实现这一点的信息,但我没有在文档中找到它,尽管我确定它在某处.

我希望issues成为父资源并成为子资源,pages以便/issues/1/pages返回所有issue_id1的页面.

有没有一种使用基于通用类的视图实现此目的的好方法?

这是我到目前为止所拥有的.

RESTAPI/urls.py:

from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns
from restAPI import views

urlpatterns = patterns('',
    url(r'^issues/$', views.IssueList.as_view()),
    url(r'^issues/(?P<pk>[0-9]+)/$', views.IssueDetail.as_view()),


    url(r'^issues/(?P<issue_id>[0-9]+)/pages/$', views.PageList.as_view()),    
    url(r'^pages/(?P<pk>[0-9]+)/$', views.PageDetail.as_view()),
)

urlpatterns = format_suffix_patterns(urlpatterns)
Run Code Online (Sandbox Code Playgroud)

RESTAPI/models.py:

from django.db import models

class Issue(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    revision = models.IntegerField(default = 1)
    issue_date = models.DateTimeField(auto_now_add=True)
    issue_image_url = models.CharField(max_length=100)

class Page(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    page_number = models.IntegerField()
    standard_page_url = models.CharField(max_length=100, default='')
    large_page_url = models.CharField(max_length=100, default='') …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

21
推荐指数
2
解决办法
5141
查看次数

Yesod ExitFailure 1安装脚手架应用程序时

我正在尝试安装我的第一个脚手架Yesod应用程序.当我运行cabal-dev install && yesod --dev devel它失败时使用ExitFailure 1.我使用sqlite进行持久化.

Application.hs:49:44:
No instance for (monad-logger-0.3.1:Control.Monad.Logger.MonadLogger
                   IO)
  arising from a use of `runMigration'
Possible fix:
  add an instance declaration for
  (monad-logger-0.3.1:Control.Monad.Logger.MonadLogger IO)
In the second argument of `Database.Persist.Store.runPool', namely
  `(runMigration migrateAll)'
In a stmt of a 'do' block:
  Database.Persist.Store.runPool dbconf (runMigration migrateAll) p
In the expression:
  do { manager <- newManager def;
       s <- staticSite;
       dbconf <- withYamlEnvironment
                   "config/sqlite.yml" (appEnv conf) Database.Persist.Store.loadConfig
                 >>= Database.Persist.Store.applyEnv;
       p <- Database.Persist.Store.createPoolConfig
              (dbconf :: PersistConfig);
       .... } …
Run Code Online (Sandbox Code Playgroud)

haskell yesod

10
推荐指数
2
解决办法
781
查看次数

以编程方式设置django ModelForm中排除字段的值

我有一个ModelForm类,我想language从表单中排除一个字段()并以编程方式添加它.我尝试在clean方法中添加语言,但得到了一个IntegrityError("Column 'language_id' cannot be null").我假设这是因为language返回的任何数据clean()都将被忽略,因为它在排除元组中.我在ModelAdmin课堂上使用这个表格.我没有找到任何方法来处理这个,所以任何提示或提示将非常感激.

from django import forms
from myapp import models
from django.contrib import admin


class DefaultLanguagePageForm(forms.ModelForm):
    def clean(self):
        cleaned_data = super(DefaultLanguagePageForm, self).clean()
        english = models.Language.objects.get(code="en")
        cleaned_data['language'] = english

        return cleaned_data

    class Meta:
        model = models.Page
        exclude = ("language",)

class PageAdmin(admin.ModelAdmin):
    form = DefaultLanguagePageForm
Run Code Online (Sandbox Code Playgroud)

python django

7
推荐指数
1
解决办法
1586
查看次数

编写Django RESTful API的功能测试

我正在尝试为使用Django REST Framework编写的REST API编写一些功能测试.然而,它并不是特定于该框架,因为它主要是一般的Django.

这就是我想要做的

  1. setUp在测试类的方法中创建用户
  2. 使用测试客户端从API请求用户令牌

tests.py

from django.test import LiveServerTestCase

from django.contrib.auth.models import User
from django.test.client import Client
from rest_framework.authtoken.models import Token

class TokenAuthentication(LiveServerTestCase):
    def setUp(self):
        user = User.objects.create(username='foo', password='password', email="foo@example.com")
        user.save()
        self.c = Client()

    def test_get_auth_token(self):
        user = User.objects.get(username="foo")
        print user # this outputs foo
        print Token.objects.get(user_id = user.pk) # this outputs a normal looking token
        response = self.c.post("/api-token-auth/", {'username': 'foo', 'password': 'password'})
        print response.status_code # this outputs 400
        self.assertEqual(response.status_code, 200, "User couldn't log in")
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,它返回状态400而不是200,因此用户未经过身份验证.如果我输入已经在数据库中的用户的凭据,它会通过.所以我假设在测试类中创建的记录只能在它自己的方法中访问,这可能是因为它是为单元测试而设计的.但是我使用数据库中的数据来执行测试,如果数据发生变化,它将失败. …

django functional-testing django-testing django-rest-framework

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