Django测试视图是否在反转之前返回404

时间:2015-06-12 16:36:58

标签: django

在我的urls.py中,我有以下内容:

url(r'^foo/', FooView.as_view(), name='foo_name'),

FooView可能会返回404

所以在我使用之前:

url = reverse('foo_name', args=(,))

我想确保视图不会返回404。

我该怎么做,有没有办法检查resolve

2 个答案:

答案 0 :(得分:2)

resolve的文档证明了这一点。您需要首先反转url,然后您可以解析url以获取视图的callable,并运行视图以查看它是否会引发404.请注意视图是否有影响(例如,更改数据库中的数据),因为代码实际上会运行视图。

        int current = 0;
        ServerSocket serverSocket = null;
        InputStream in = null;
        OutputStream output = null;
        DataInputStream ClientData;
        try{
        serverSocket = new ServerSocket(8988);
            Socket ClientSocket = null;
            ClientSocket = serverSocket.accept();
            in = ClientSocket.getInputStream();
            ClientData = new DataInputStream(in);
            String FileName = ClientData.readUTF();
            output = new FileOutputStream(Environment.getExternalStorageDirectory()+"/" + FileName);
            long size = ClientData.readLong();
            byte[] buffer = new byte[8192];
            int bytesRead;
            while((bytesRead = ClientData.read(buffer)) > 0){
                output.write(buffer, 0, bytesRead);
            }
            output.flush();
            in.close();
            output.close();
            ClientSocket.close();
            serverSocket.close();
            return FileName;
        } catch (IOException e) {
            Log.e(WiFiDirectActivity.TAG, e.getMessage());
            return null;
        }

请注意,这只是测试您当前请求的网址。网址可能会返回404,具体取决于许多因素,包括请求时间,登录用户或请求方法。

答案 1 :(得分:0)

如果只是测试你的urls.py中是否匹配,你可以:

try:
    url = reverse('foo_name', args=(,))
except NoReverseMatch:
    # do sth
else:
    # do sth else

这不会测试将被调用的特定视图最终是否会返回404。

参考:Django docs