小编use*_*500的帖子

使用名为"pk"的URL关键字参数调用的预期视图

我正在密切关注测试文档,为Django Rest Framework视图编写测试

这是我的简单测试:

def test_patient_detail_api_opens(self):
    factory = APIRequestFactory()
    view =PatientDetailApi.as_view()
    request = factory.get(reverse('api_pacjent', kwargs={'pk' :1}))
    force_authenticate(request, user=self.user)
    response = view(request)
    self.assertEqual(response.status_code, 200)
Run Code Online (Sandbox Code Playgroud)

此测试失败,并显示以下消息:

AssertionError: Expected view PatientDetailApi to be called with a URL keyword argument named "pk". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly.
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会发生这种情况以及如何解决这个问题.

  • pkkwargs是存在的URL,
  • 根据文档,lookup-field如果默认值pk,则无需显式添加值,
  • 视图打开正确,但此测试失败...

有人可以解释为什么会出现这种错误吗?

这是相关的代码:

'主' url.py:

urlpatterns = [
    url(r'^pacjent/', include('pacjent.urls')),
] 
Run Code Online (Sandbox Code Playgroud)

pacjent.urls 看起来像这样:

url(r'^api/szczegoly/(?P<pk>\d+)/$', PatientDetailApi.as_view(), name="api_pacjent"), …
Run Code Online (Sandbox Code Playgroud)

python testing django django-generic-views django-rest-framework

18
推荐指数
2
解决办法
9357
查看次数

嵌套关系序列化器中的Django Rest Framework模型Id字段

我使用Django Rest Framework,我有以下两个序列化器:

class ServiceSerializer(serializers.ModelSerializer):
    id = serializers.ReadOnlyField()

    class Meta:
        model = ServiceType
        fields = ('id', 'serviceName', 'servicePrice')


class CompanyShortListSerializer(serializers.ModelSerializer):

     services = ServiceSerializer(many=True)

     class Meta:
         model = Company
         fields = ( 'id','name','address','cost_per_patient','cost_per_month','renting_fee','services')
Run Code Online (Sandbox Code Playgroud)

ServiceType模型如下所示:

class ServiceType(models.Model):
     serviceName = EncryptedCharField(max_length=100, blank=True, verbose_name = "Typ us?ugi")
     servicePrice = EncryptedFloatField(null=True, blank=True, verbose_name = "Cena us?ugi", validators = [MinValueValidator(0.1), MaxValueValidator(999)])
     company = models.ForeignKey(Company, related_name = 'services')
Run Code Online (Sandbox Code Playgroud)

我想通过更改相关服务来更新现有实例(例如删除其中一些).要做到这一点,我这样做:

def update(self, instance, validated_data):
    # Updates an exisitng Company with several services 
    instance.name = validated_data['name']
    instance.address = validated_data['address'] …
Run Code Online (Sandbox Code Playgroud)

python django rest django-rest-framework

16
推荐指数
2
解决办法
7402
查看次数

如何为电子应用程序提供Django服务

我正在尝试创建一个Electron桌面应用程序,它的后端有一个Django应用程序.有几个教程和博客提到了如何实现这一目标.我已经尝试了这些并且似乎有效,但是有一些问题.

对我来说其中一个是如何在这种情况下为Django服务器?对我来说,目前的做法造成一些不必要的延迟,使应用程序启动缓慢......

通常,创建Django/Electron应用程序需要做的是将Django应用程序打包(我使用pyInstaller)到一个独立的可执行文件中,然后将其捆绑到Electron应用程序中.问题是在使用pyInstaller打包之前,服务器应该使用哪个服务器来服务器Django?目前我正在使用cherryPy作为WSGI Web服务器来为Django提供服务.

但是 - 有没有更好的选择,知道这将用于Electron桌面应用程序?也许更快,或更适合这项任务?在这种情况下处理Django的典型方法是什么?

javascript python django node.js electron

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

带有login_required和permission_required的@method_decorator

我正在使用基于类的视图,我希望确保每个视图都可以由登录用户和一种类型的用户访问(有两组用户 - 每组具有不同的权限).

我正在根据文档继续实现这个(我正在使用Django 1.7.7)https://docs.djangoproject.com/en/1.7/topics/class-based-views/intro/#decorating-the- class,但是使用两个参数会引发错误" method_decorator()只需要1个参数(给定2个) ".

因此 - 如何在基于类的视图中验证这两个因素(登录和权限)?

class PatientCreate(CreateView):
    model = Patient
    fields = '__all__'

    @method_decorator(login_required, permission_required('patient.session.can_add_patient'))
    def dispatch(self, *args, **kwargs):
        return super(PatientCreate, self).dispatch(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

谢谢!

django django-templates django-views

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

PyInstaller Tkinter窗口低分辨率在应用程序包中,但不在应用程序中

我想我错过了一些明显的东西,但我无法弄清楚自己.

我正在使用PyInstaller(运行dev3.3版本)从Python 2.7构建Mac应用程序.该应用程序工作正常,没有问题.一开始,有一个小窗口用于使用Tkinter构建的更新.

在使用PyInstaller(运行oneflie选项)构建应用程序后,我得到两个文件(ls -al结果):

-rwxr-xr-x   1 karoldra  staff  62756614  8 lis 11:08 mac
drwxr-xr-x   3 karoldra  staff       102  8 lis 11:09 mac.app
Run Code Online (Sandbox Code Playgroud)

这是该文件夹的结构:

  • 苹果电脑
  • mac.app
    • 内容
      • 构架
      • 的Info.plist
      • 苹果系统
        • 苹果电脑
      • 资源
        • MyIcon.icns

基本上 - mac.app包包含与主文件夹完全相同的mac文件.

问题是我在Tkinter窗口中获得了不同的分辨率,具体取决于我实际运行的文件.这是Tkiter窗口的示例:

  • 顶部的一个是从mac文件中运行的
  • 底部是从mac.app文件中运行的

在此输入图像描述

你可以看到底部的分辨率由于某种原因而低得多......

有人能告诉我为什么会这样,以及如何解决这个问题?

python macos tkinter pyinstaller

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

WrappedAttributeError 'IsAdminUser' 对象没有属性 'authenticate'

我正在使用 Django Rest Frameworkpermission_classes来创建 API。我的理解是,一旦我使用未经身份验证的用户访问该 API,我应该被重定向到登录表单,对吗?相反,我收到以下错误:

WrappedAttributeError at /sessions/api/listPatients/ 'IsAdminUser' object has no attribute 'authenticate'

没有重定向到登录表单......我不明白为什么。

为什么会这样?我究竟做错了什么?如何解决?

这是urls.py

path('api/getSessions/',
     views.GetSessions.as_view(),
     name="GetSessionsAPI"),
Run Code Online (Sandbox Code Playgroud)

这是我试图去的观点:

class GetSessions(generics.ListCreateAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = SessionSerializer

    def get_queryset(self):
        if self.request.user.is_authenticated:
            return Session.objects.filter(
                patient__created_by_user=self.request.user)
        else:
            raise PermissionDenied
Run Code Online (Sandbox Code Playgroud)

这是另一个引发错误的:

class ListPatients(generics.ListAPIView):

    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = PatientsSerializer

    def get_queryset(self):
        if self.request.user.is_authenticated:
            try:
                return Patient.objects.filter(
                    created_by_user=self.request.user).\
                   filter(curently_active=True)
            except Patient.DoesNotExist:
                raise PermissionDenied
    else:
        raise PermissionDenied
Run Code Online (Sandbox Code Playgroud)

这是完整的追溯:

WrappedAttributeError at /sessions/api/listPatients/
'IsAdminUser' object has no attribute 'authenticate'
Request …
Run Code Online (Sandbox Code Playgroud)

django django-authentication django-rest-framework

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