我正在密切关注测试文档,为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
我使用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) 我正在尝试创建一个Electron桌面应用程序,它的后端有一个Django应用程序.有几个教程和博客提到了如何实现这一目标.我已经尝试了这些并且似乎有效,但是有一些问题.
对我来说其中一个是如何在这种情况下为Django服务器?对我来说,目前的做法造成一些不必要的延迟,使应用程序启动缓慢......
通常,创建Django/Electron应用程序需要做的是将Django应用程序打包(我使用pyInstaller)到一个独立的可执行文件中,然后将其捆绑到Electron应用程序中.问题是在使用pyInstaller打包之前,服务器应该使用哪个服务器来服务器Django?目前我正在使用cherryPy作为WSGI Web服务器来为Django提供服务.
但是 - 有没有更好的选择,知道这将用于Electron桌面应用程序?也许更快,或更适合这项任务?在这种情况下处理Django的典型方法是什么?
我正在使用基于类的视图,我希望确保每个视图都可以由登录用户和一种类型的用户访问(有两组用户 - 每组具有不同的权限).
我正在根据文档继续实现这个(我正在使用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)
谢谢!
我想我错过了一些明显的东西,但我无法弄清楚自己.
我正在使用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包包含与主文件夹完全相同的mac文件.
问题是我在Tkinter窗口中获得了不同的分辨率,具体取决于我实际运行的文件.这是Tkiter窗口的示例:
mac文件中运行的mac.app文件中运行的你可以看到底部的分辨率由于某种原因而低得多......
有人能告诉我为什么会这样,以及如何解决这个问题?
我正在使用 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 ×5
python ×4
django-views ×1
electron ×1
javascript ×1
macos ×1
node.js ×1
pyinstaller ×1
rest ×1
testing ×1
tkinter ×1