小编Sco*_*all的帖子

Django:基于类的ListView中的搜索表单

我试图实现一个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

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

Django unittest和mocking请求模块

我是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)

关于我做错了什么的想法?

python unit-testing mocking python-requests

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

使用DRF ModelViewSet和TemplateHTMLRenderer时,如何访问模板中的数据?

我有一个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)

django django-rest-framework

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