Python Flask - 创建新项目后出错

Python Flask - Errors after creating a new project

在创建一个新项目并尝试 运行 之后,我得到了这样的结果:

 * Environment: development
 * Debug mode: off
Traceback (most recent call last):
  File "C:\Users\Sebastian\AppData\Local\Programs\Python\Python38-32\lib\runpy.py", line 192, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\Sebastian\AppData\Local\Programs\Python\Python38-32\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\flask\__main__.py", line 3, in <module>
    main()
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\flask\cli.py", line 994, in main
    cli.main(args=sys.argv[1:])
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\flask\cli.py", line 600, in main
    return super().main(*args, **kwargs)
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\click\core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\click\core.py", line 1659, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\click\core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\click\core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\click\decorators.py", line 84, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\click\core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\flask\cli.py", line 853, in run_command
    run_simple(
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\werkzeug\serving.py", line 1010, in run_simple
    inner()
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\werkzeug\serving.py", line 950, in inner
    srv = make_server(
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\werkzeug\serving.py", line 782, in make_server
    return ThreadedWSGIServer(
  File "C:\Users\Sebastian\PycharmProjects\informatyka\venv\lib\site-packages\werkzeug\serving.py", line 688, in __init__
    super().__init__(server_address, handler)  # type: ignore
  File "C:\Users\Sebastian\AppData\Local\Programs\Python\Python38-32\lib\socketserver.py", line 452, in __init__
    self.server_bind()
  File "C:\Users\Sebastian\AppData\Local\Programs\Python\Python38-32\lib\http\server.py", line 139, in server_bind
    self.server_name = socket.getfqdn(host)
  File "C:\Users\Sebastian\AppData\Local\Programs\Python\Python38-32\lib\socket.py", line 756, in getfqdn
    hostname, aliases, ipaddrs = gethostbyaddr(name)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe6 in position 4: invalid continuation byte

我已经尝试重新安装 python、更改 python 版本、更新 PIP,但其中 none 有帮助。同样的问题是创建一个 Diango 项目。

顺便问一下,你试过使用64位版本的Python吗?我不太确定 Django 在 32 位环境中的行为方式。

无论如何,主要问题似乎与您的 WSGI 服务器有关,而不是 Django 本身。您似乎正在尝试在 WSGI 服务器中使用线程,它包含在您的 python 进程中,它将与所有 Python 进程一样绑定到单个线程。

我的建议:使您的 wsgi.py 尽可能简单,并让像 gunicorn 这样的 WSGI 外部服务器处理并行性。您的 wsgi.py 的示例可能是这样的:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hellodjango.settings")

# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

# Apply WSGI middleware here.
from helloworld.wsgi import HelloWorldApplication  # Change the defaults for your app paths
application = HelloWorldApplication(application)

要运行您的应用程序作为服务器,只需运行以下命令: gunicorn helloworld.wsgi,再次更改 helloworld 为您的应用程序名称。检查 gunicorn docs 以获取有关 运行 并行实例的更多信息,这只是您必须设置的 --workers 配置参数,其中包含您的计算机可以处理的工作人员数量(通常是您的 CPU 数量 - 1 ).

干杯!