我试图实现一个Class Based ListView显示选择的表集.如果第一次请求站点,则应显示数据集.我更喜欢POST提交,但GET也没关系.
这是一个容易处理的问题,function based views但是基于类的视图我很难理解.
我的问题是我得到了各种错误,这是由于我对基于分类的观点的理解有限.我已阅读各种文档,我理解直接查询请求的视图,但只要我想在查询语句中添加一个表单,我就遇到了不同的错误.对于下面的代码,我会收到一个ValueError: Cannot use None as a query value.
根据表单条目(否则选择整个数据库),基于类的ListView的最佳实践工作流程是什么?
这是我的示例代码:
models.py
class Profile(models.Model):
name = models.CharField(_('Name'), max_length=255)
def __unicode__(self):
return '%name' % {'name': self.name}
@staticmethod
def get_queryset(params):
date_created = params.get('date_created')
keyword = params.get('keyword')
qset = Q(pk__gt = 0)
if keyword:
qset &= Q(title__icontains = keyword)
if date_created:
qset &= Q(date_created__gte = date_created)
return qset
Run Code Online (Sandbox Code Playgroud)
forms.py
class ProfileSearchForm(forms.Form):
name = forms.CharField(required=False)
Run Code Online (Sandbox Code Playgroud)
views.py
class ProfileList(ListView):
model = Profile
form_class = …Run Code Online (Sandbox Code Playgroud) forms django listview django-class-based-views class-based-views
我是Mock的新手,我正在为这个函数编写一个单元测试:
# utils.py
import requests
def some_function(user):
payload = {'Email': user.email}
url = 'http://api.example.com'
response = requests.get(url, params=payload)
if response.status_code == 200:
return response.json()
else:
return None
Run Code Online (Sandbox Code Playgroud)
我使用Michael Foord的Mock库作为我的单元测试的一部分,并且很难嘲笑response.json()返回json结构.这是我的单元测试:
# tests.py
from .utils import some_function
class UtilsTestCase(unittest.TestCase):
def test_some_function(self):
with patch('utils.requests') as mock_requests:
mock_requests.get.return_value.status_code = 200
mock_requests.get.return_value.content = '{"UserId":"123456"}'
results = some_function(self.user)
self.assertEqual(results['UserId'], '123456')
Run Code Online (Sandbox Code Playgroud)
在没有运气阅读文档后,我尝试了不同模拟设置的多种组合.如果我results在单元测试中打印它总是显示以下内容而不是我想要的json数据结构:
<MagicMock name=u'requests.get().json().__getitem__().__getitem__()' id='30315152'>
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么的想法?
我有一个Django Rest Framework ModelViewSet,我正在尝试使用它TemplateHTMLRenderer来显示HTML.继续在教程中:
from rest_framework import permissions, renderers, viewsets
from rest_framework.decorators import link
from . import models, serializers
from .permissions import IsOwnerOrReadOnly
class SnippetViewSet(viewsets.ModelViewSet):
template_name = 'snippet-list.html'
queryset = models.Snippet.objects.all()
serializer_class = serializers.SnippetSerializer
renderer_classes = (renderers.TemplateHTMLRenderer,)
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
@link(renderer_classes=[renderers.StaticHTMLRenderer])
def highlight(self, request, *args, **kwargs):
snippet = self.get_object()
return Response(snippet.highlighted)
def pre_save(self, obj):
obj.owner = self.request.user
Run Code Online (Sandbox Code Playgroud)
如果我添加一个键,def resolve_context()我可以访问模板中传递给的模型对象RequestContext.如果我不添加data密钥,那么我不知道如何访问代码片段.
def resolve_context(self, data, request, response):
if response.exception:
data['status_code'] = …Run Code Online (Sandbox Code Playgroud)