【问题标题】:Run Django without server在没有服务器的情况下运行 Django
【发布时间】:2019-11-05 06:37:19
【问题描述】:

我有一个小型 Django 站点,mysite。我希望能够在不运行 Web 服务器的情况下运行我的 Django 应用程序。我不想使用 HTTP 客户端发出请求,而是想编写如下内容:

django.run()
result = django_request('/foo/bar')

所以 Django 仍然会进行 URL 解析等,只是不通过 UWSGI 提供服务。这合理吗?

我的最终目标是对我的 Web 应用程序的端点进行端到端基准测试,I/O 除外。

【问题讨论】:

  • Django 是一个网络框架。您想要做的事情已经可以使用纯 Python 完成。如果你只想使用 Django 的 ORM 和模板功能,可以考虑使用 SQLAlchemy 和 Jinja2。
  • 您要解决的真正问题是什么?
  • 我有一个 Django 应用程序,我想在不涉及大量 I/O 的情况下进行基准测试。我想测量整个堆栈减去实际的套接字内容(甚至后端没有数据库),这会很嘈杂。
  • 我在问题中添加了更多信息。
  • I/O 是对 Web 应用程序性能影响最大的因素之一。所以,不要指望你的结果很有帮助。

标签: python django


【解决方案1】:

您可以使用 Django 测试客户端。

在 django shell 中尝试以下代码

➜ python manage.py shell
Python 3.6.8 (default, Aug 20 2019, 17:12:48) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from django.test import Client

In [2]: c = Client()

In [3]: response = c.get('/blog/')

In [4]: response.status_code
Out[4]: 200

In [5]: response.content
Out[5]: b'\n<!DOCTYPE html>\n<html>\n<head>\n\t<title>My Blog</title>\n\t<link href="/static/css/blog.css" rel="stylesheet">\n</head>\n<body>\n\t<div id="content">\n\t\t\n\t<h1>My Blog</h1>\n\t\n\t\t<h2>\n\t\t\t<a href="/blog/2019/10/16/my-second-post/">\n\t\t\t\tmy second post\n\t\t\t</a>\n\t\t</h2>\n\t\t<p class="date">\n\t\t\tPublished Oct. 16, 2019, 7:15 a.m. by admin\n\t\t</p>\n\t\t<p>Nice</p>\n\t\n\n\t</div>\n\t<div id="sidebar">\n\t\t<h2>My blog</h2>\n\t\t<p>This is my blog</p>\n\t</div>\n</body>\n</html>'

看看官方文档Test Client

【讨论】:

  • 这是否仍然运行服务器并执行所有必需的套接字 I/O?
  • @tekknolagi 我猜没有。它直接解析你的 urlconf 并返回响应。
【解决方案2】:

您也可以编写自己的management commands,并通过类似的方式调用它们

./manage.py my_foo_command --bar=baz --output=baz.txt

(您编写的部分使用 Python Argparse 解析您的命令)

【讨论】:

    猜你喜欢
    • 2012-04-15
    • 2016-06-22
    • 1970-01-01
    • 2016-04-12
    • 2013-03-09
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多