问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

django怎么运行(开启django项目的命令)

发布网友 发布时间:2024-09-25 14:24

我来回答

1个回答

热心网友 时间:2024-10-04 02:42

本篇文章首席CTO笔记来给大家介绍有关django怎么运行以及开启django项目的命令的相关内容,希望对大家有所帮助,一起来看看吧。

本文目录一览:

1、如何用 FastCGI 运行 Django2、我有个linux的虚拟主机,我想运行django网站,怎么办?3、如何在服务器上部署Django项目并使其在后台一直运行4、Django新手教程6,新建一个项目5、Django源码阅读 (一) 项目的生成与启动如何用 FastCGI 运行 Django

首先要安装 flup,

这是 Python 处理 FastCGI 的库。

FactCGI 采用 c/s 模型,独立的运行一个进程。在需要处理请求时,web 服务器(apache, httpd,..)直接和 FactCGI 进程进行通信即可。

web 服务器可通过两种办法和 FastCGI server 连接:

1. Unix domain socket(或 win32 的“命名管道")

2. TCP socket

通常 TCP socket 更简单,因为权限问题比较好配置。

如何启动 FactCGI 服务器:

到项目目录中,执行:

./manage.py runfcgi [options]

如果要看帮助:

./manage.py runfcgi help

在选项中,需要指定一个 socket 或 host 和 port 的组合,这样的话,当你启动 web server 时,就可以通过这些信息来连接到 FactCGI 服务器。

例子

在 TCP 端口中运行一个线程内服务器:

./manage.py runfcgi method=threaded host=127.0.0.1 port=3033

在 Unix domain socket 上运行一个 preforked 服务器:

./manage.py runfcgi method=prefork socket=/home/user/mysite.sock pidfile=django.pid

不作为后台进程执行(便于调试):

./manage.py runfcgi daemonize=false socket=/tmp/mysite.sock

如何停止后台的 FastCGI 进程:

1. 如果指定了 pidfile 属性,则可以这样:

kill `cat $PIDFILE`

其中 $PIDFILE 是你指定的 pidfile 选项。

要重启 Unix 上的后台 FactCGI 进程,可执行下列 shell 脚本:

#!/bin/bash

# Replace these three settings.

PROJDIR="/home/user/myproject"

PIDFILE="$PROJDIR/mysite.pid"

SOCKET="$PROJDIR/mysite.sock"

cd $PROJDIR

if [ -f $PIDFILE ]; then

kill `cat -- $PIDFILE`

rm -f -- $PIDFILE

fi

exec /usr/bin/env - \

PYTHONPATH="../python:.." \

./manage.py runfcgi socket=$SOCKET pidfile=$PIDFILE

Apache 的设定:

1. 需要安装了 mod_fastcgi

2. 编辑 httpd.conf:

(1) 用 FastCGIExternalServer 指向 FastCGI 服务器的位置

可以用 socket 也可以用主机+端口的方式指定。例子:

# Connect to FastCGI via a socket / named pipe.

FastCGIExternalServer /home/user/public_html/mysite.fcgi -socket /home/user/mysite.sock

# Connect to FastCGI via a TCP host/port.

FastCGIExternalServer /home/user/public_html/mysite.fcgi -host 127.0.0.1:3033

不管上述那种情况,/home/user/public_html/mysite.fcgi 这个文件是不需要存在的。其作用指示作为一个 URL 指示 Web 服务器哪些请求需要被 FastCGI 来处理。

(2) 用 mod_rewrite 来分派需要处理的 URL 到 FastCGI.

例子:

VirtualHost 12.34.56.78

ServerName example.com

DocumentRoot /home/user/public_html

Alias /media /home/user/python/django/contrib/admin/media

RewriteEngine On

RewriteRule ^/(media.*)$ /$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]

/VirtualHost

这里指示的重写后的 url 就是上面 FastCGIExternalServer 中那个。

上述配置将不是 /media/ 开头的,或者指向不存在的文件的请求,转给了 FastCGI.

lighttpd 配置

lighttpd 天然的支持 FastCGI.

首先要确认你的 mod_fastcgi 在模块列表中,并且在 mod_rewrite 和 mod_access 后,在 mod_accesslog 前。

为了服务 admin media, 也许你还需要 mod_alias.

在 lighttpd 的配置文件中加如下一段:

server.document-root = "/home/user/public_html"

fastcgi.server = (

"/mysite.fcgi" = (

"main" = (

# Use host / port instead of socket for TCP fastcgi

# "host" = "127.0.0.1",

# "port" = 3033,

"socket" = "/home/user/mysite.sock",

"check-local" = "disable",

)

),

)

alias.url = (

"/media/" = "/home/user/django/contrib/admin/media/",

)

url.rewrite-once = (

"^(/media.*)$" = "$1",

"^/favicon\.ico$" = "/media/favicon.ico",

"^(/.*)$" = "/mysite.fcgi$1",

)

还可以在一个 lighttp 服务器上跑多个 Django. 只要为每一个应用指定一个独立的 FastCGI host.

如何在共享的 web hosting 上运行 Django / Apache:

编辑 .htaccess:

AddHandler fastcgi-script .fcgi

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]

再写一个 mysite.fcgi 的可执行的脚本:

#!/usr/bin/python

import sys, os

# Add a custom Python path.

sys.path.insert(0, "/home/user/python")

# Switch to the directory of your project. (Optional.)

# os.chdir("/home/user/myproject")

# Set the DJANGO_SETTINGS_MODULE environment variable.

os.environ['DJANGO_SETTINGS_MODULE'] = "myproject.settings"

from django.core.servers.fastcgi import runfastcgi

runfastcgi(method="threaded", daemonize="false")

在更新代码后,可以通过重新上传 mysite.fcgi 文件来指示 Apache 重启 Django 程序。

如果有 shell 权限,可以直接用 touch 命令改变时间戳:

touch mysite.fcgi

我有个linux的虚拟主机,我想运行django网站,怎么办?

我是linux主机,我这样在本地运行django

1在终端进入django项目的文件夹,是有manage.py的那个目录

2然后运行python manage.py runserver

就可以跑起来了

如何在服务器上部署Django项目并使其在后台一直运行

前几天老师让我把一个Django项目(爬虫网页)放到校园内网上,但是我想先用自己的服务器来尝试一下。之前刚好有在Digital Ocean上买过服务器用来运行ss脚本,平时服务器一直放着没啥用,所以就拿它来试验一下。

废话不多说,第一步通过WinSCP软件把Django文件传到服务器上。

在服务器中安装Django需要的环境和我所需要的Python第三方库。

以上所有步骤完成后,还需要进行一步操作,这是我经历的一个 坑 。 打开Django文件目录中的 settings.py,把 ALLOWED_HOSTS=[] 改为 ALLOWED_HOSTS=["*"] 。

在服务器中打开到 manage.py 所在的目录,输入命令:

python3 manage.py runserver 0.0.0.0:8000

然后按下回车,在浏览器中输入: 该服务器IP地址:8000 ,大功告成!

Attention:

1. python3 不是特定的,是根据你的Django项目所需要的环境指定的。

2. 8000 是端口号,可以修改。

如果想要Django项目一直运行,关闭终端后还在运行,即需要运行如下命令, nohup command, command 即位上文所说的 python3 manage.py runserver 0.0.0.0:8000 。

Django新手教程6,新建一个项目

感觉再不按套路出牌就要被群众围殴了,那咱么就开始吧。

打开CMD黑窗口,我们输入

workon django_env

我们先看看怎么在黑窗口里面穿梭于各个URL之间,你先看你现在所处的位置,一般来说,新打开的CMD,都是处于

C:/User/your_name

这个位置,我们先到D盘,根目录从C到D,我们只需要输入

D:

就可以到达D盘了,如果你的django_env是激活的那么,他会自动跳转到

D:/py_env/django_env

这个目录下,我们当然可以把项目就建在这里,但也可以建在别的地方。所以请输入(注意cd和两点之间有一个空格)

cd ..

cd是前往的意思,两个小点指的是父亲,意思是前往当前目录的父目录,

于是,我们来到

D:/py_env

目录下,再次输入

cd ..

于是我们达到

D:/

这已经是D盘的根目录的再输入cd ..已经没有什么效果了。如果你之前按照我的教程一步一步来,那么,你已经在在这个根目录上建好了一个叫django_project的空文件夹,如果你没有建好 ,那么请输入

mkdir django_project

创建一个这个文件夹,当然,你也可以在图形界面,打开我的计算机,然后到达位置右键新建文件夹。这里为了逼格和更加熟悉cmd窗口起见,我建议你还是用命令行。

我们cmd的路径(准确的说是工作路径)现在在D盘的根目录,

因此,请输入

cd django_project

表示前往 django_project ,当然,这个时候你得确定django_project是D盘根目录下的一个子目录。

如果,我们还处于

D:py_env/django_env

那么输入

cd django_project是无效的,你得按照我们刚才一步一步抵达D盘,然后在进入到django_project。或者,你可以直接输入绝对路径

cd D:/django_project

使用上面的命令,只要你处于D盘,无论是在哪一级的目录,都可以一步到位。

抵达现场,我们马上就要新建我们的项目了。

激动人心的一刻到了,请在CMD中输入

django-admin startproject mysite

这时,我们创建了一个项目,这个项目的名字叫mysite,等等,说好的做云盘,为毛名字不是mycloud呢?这就要提到django的精妙之处了,新建了一个项目,就相当于,我们在计算机上圈了一块地(D:/django_project/mysite目录以后就是我们网络服务这一块的地盘了),还没开始建展馆,为什么先圈地而不是直接新建一个展馆呢,因为我们圈了地就可以在地上建很多展馆啊,在django看来,云盘啥的,够不上称为一个项目,只能称之为应用(一座展馆),只有将很多展馆放在一起,才能称之为项目,也就是说,一个项目可以包含很多的应用(APP),比如我们的网站可以提供云盘服务,我们也可以,提供个人博客服务,我们还可以开一个讨论某植物的论坛啥的,反正就是为了将来能够提供全家桶服务,所以,云盘只能算做是一个APP。当然,目前我们只这块地上建一座提供云服务的展馆。其他的展馆以后再说。

还是在cmd黑窗口,请输入

dir

用这条指令可以列出当前目录下的子目录和存放文件的情况,

我们可以看到,生成一个叫mysite的子目录,实际上,在mysite的上面还有两个目录,一个目录是一个点,表示自己,也就是django_project本身,另一个目录是两个点,表示父目录,也就是D盘根目录。所以我们看到的是django_project目录的一家三代。

这和图形界面基本是统一的,下图的左上角圈的地方表示的就是父目录,至于本身目录嘛,就没必要刻意用什么图形表示了。

你用鼠标点击某个文件夹,实际上系统内部就是帮你运行了一下

cd 你点击的文件夹

你点击后退,则帮你运行

cd ..

回到正题,我们看到了一个mysite子目录,所以进去看看,请输入

cd mysite

然后输入

dir

查看情况

发现又有一个mysite目录,坑爹啊,俄罗斯套娃呢这是!

这一看就知道django是外国人搞得工具,子目录跟父目录叫同一个名字(好歹给子一级的目录起个名字叫mysite二世啥的行不。没办法,django设计者这么叫了,我们也不能随便乱改,以后我们把里面的那个mysite叫做子mysite,外面的那个叫父mysite以区分),仔细一看,旁边还有一个manage.py,先不不管这个,再进去子mysite看一下,还好,再没有mysite目录了,里面是

里面有4个py文件,看到没有,其中有一个是urls.py,URL之重要,需要专门一个文件来管理,如果你之前有认真看文章的话应该就能差不多猜到它是起什么作用的文件了。除了urls.py,settings.py也是非常重要的,都是用来管理mysite这个项目的,所以,我觉得最后这个mysite文件夹应该叫做mysite_manage因为它里面的东西,和它旁边的manage.py一样都是用来管理项目的。

为了让大家对项目结构有更清楚认识,我找了django官网上的图片

Django源码阅读 (一) 项目的生成与启动

诚实的说,直到目前为止,我并不欣赏django。在我的认知它并不是多么精巧的设计。只是由功能堆积起来的"成熟方案"。但每一样东西的崛起都是时代的选择。无论你多么不喜欢,但它被需要。希望有一天,python能有更多更丰富的成熟方案,且不再被诟病性能和可维护性。(屁话结束)

取其精华去其糟粕,django的优点是方便,我们这次源码阅读的目的是探究其方便的本质。计划上本次源码阅读不会精细到每一处,而是大体以功能为单位进行解读。

django-admin startproject HelloWorld 即可生成django项目,命令行是exe格式的。

manage.py 把参数交给命令行解析。

execute_from_command_line() 通过命令行参数,创建一个管理类。然后运行他的 execute() 。

如果设置了reload,将会在启动前先 check_errors 。

check_errors() 是个闭包,所以上文结尾是 (django.setup)() 。

直接看最后一句 settings.INSTALLED_APPS 。从settings中抓取app

注意,这个settings还不是我们项目中的settings.py。而是一个对象,位于 django\conf\__init__.py

这是个Settings类的懒加载封装类,直到 __getattr__ 取值时才开始初始化。然后从Settings类的实例中取值。且会讲该值赋值到自己的 __dict__ 上(下次会直接在自己身上找到,因为 __getattr__ 优先级较低)

为了方便debug,我们直接写个run.py。不用命令行的方式。

项目下建个run.py,模拟runserver命令

debug抓一下setting_module

回到 setup() 中的最后一句 apps.populate(settings.INSTALLED_APPS)

开始看 apps.populate()

首先看这段

这些App最后都会封装成为AppConfig。且会装载到 self.app_configs 字典中

随后,分别调用每个appConfig的 import_models() 和 ready() 方法。

App的装载部分大体如此

为了方便debug我们改写下最后一句

res的类型是Command django.contrib.staticfiles.management.commands.runserver.Command object at 0x00000101ED5163A0

重点是第二句,让我们跳到 run_from_argv() 方法,这里对参数进行了若干处理。

用pycharm点这里的handle会进入基类的方法,无法得到正确的走向。实际上子类Commond重写了这个方法。

这里分为两种情况,如果是reload重载时,会直接执行 inner_run() ,而项目启动需要先执行其他逻辑。

django 项目启动时,实际上会启动两次,如果我们在项目入口(manage.py)中设置个print,会发现它会打印两次。

第一次启动时, DJANGO_AUTORELOAD_ENV 为None,无法进入启动逻辑。会进入 restart_with_reloader() 。

在这里会将 DJANGO_AUTORELOAD_ENV 置为True,随后重启。

第二次时,可以进入启动逻辑了。

这里创建了一个django主线程,将 inner_run() 传入。

随后本线程通过 reloader.run(django_main_thread) ,创建一个轮询守护进程。

我们接下来看django的主线程 inner_run() 。

当我们看到wsgi时,django负责的启动逻辑,就此结束了。接下来的工作交由wsgi服务器了

这相当于我们之前在fastapi中说到的,将fastapi的app交由asgi服务器。(asgi也是django提出来的,两者本质同源)

那么这个wsgi是从哪来的?让我们来稍微回溯下

这个settings是一个对象,在之前的操作中已经从 settings.py 配置文件中获得了自身的属性。所以我们只需要去 settings.py 配置文件中寻找。

我们来寻找这个 get_wsgi_application() 。

它会再次调用 setup() ,重要的是,返回一个 WSGIHandler 类的实例。

这就是wsgiapp本身。

load_middleware() 为构建中间件堆栈,这也是wsgiapp获取se

热心网友 时间:2024-10-04 02:42

本篇文章首席CTO笔记来给大家介绍有关django怎么运行以及开启django项目的命令的相关内容,希望对大家有所帮助,一起来看看吧。

本文目录一览:

1、如何用 FastCGI 运行 Django2、我有个linux的虚拟主机,我想运行django网站,怎么办?3、如何在服务器上部署Django项目并使其在后台一直运行4、Django新手教程6,新建一个项目5、Django源码阅读 (一) 项目的生成与启动如何用 FastCGI 运行 Django

首先要安装 flup,

这是 Python 处理 FastCGI 的库。

FactCGI 采用 c/s 模型,独立的运行一个进程。在需要处理请求时,web 服务器(apache, httpd,..)直接和 FactCGI 进程进行通信即可。

web 服务器可通过两种办法和 FastCGI server 连接:

1. Unix domain socket(或 win32 的“命名管道")

2. TCP socket

通常 TCP socket 更简单,因为权限问题比较好配置。

如何启动 FactCGI 服务器:

到项目目录中,执行:

./manage.py runfcgi [options]

如果要看帮助:

./manage.py runfcgi help

在选项中,需要指定一个 socket 或 host 和 port 的组合,这样的话,当你启动 web server 时,就可以通过这些信息来连接到 FactCGI 服务器。

例子

在 TCP 端口中运行一个线程内服务器:

./manage.py runfcgi method=threaded host=127.0.0.1 port=3033

在 Unix domain socket 上运行一个 preforked 服务器:

./manage.py runfcgi method=prefork socket=/home/user/mysite.sock pidfile=django.pid

不作为后台进程执行(便于调试):

./manage.py runfcgi daemonize=false socket=/tmp/mysite.sock

如何停止后台的 FastCGI 进程:

1. 如果指定了 pidfile 属性,则可以这样:

kill `cat $PIDFILE`

其中 $PIDFILE 是你指定的 pidfile 选项。

要重启 Unix 上的后台 FactCGI 进程,可执行下列 shell 脚本:

#!/bin/bash

# Replace these three settings.

PROJDIR="/home/user/myproject"

PIDFILE="$PROJDIR/mysite.pid"

SOCKET="$PROJDIR/mysite.sock"

cd $PROJDIR

if [ -f $PIDFILE ]; then

kill `cat -- $PIDFILE`

rm -f -- $PIDFILE

fi

exec /usr/bin/env - \

PYTHONPATH="../python:.." \

./manage.py runfcgi socket=$SOCKET pidfile=$PIDFILE

Apache 的设定:

1. 需要安装了 mod_fastcgi

2. 编辑 httpd.conf:

(1) 用 FastCGIExternalServer 指向 FastCGI 服务器的位置

可以用 socket 也可以用主机+端口的方式指定。例子:

# Connect to FastCGI via a socket / named pipe.

FastCGIExternalServer /home/user/public_html/mysite.fcgi -socket /home/user/mysite.sock

# Connect to FastCGI via a TCP host/port.

FastCGIExternalServer /home/user/public_html/mysite.fcgi -host 127.0.0.1:3033

不管上述那种情况,/home/user/public_html/mysite.fcgi 这个文件是不需要存在的。其作用指示作为一个 URL 指示 Web 服务器哪些请求需要被 FastCGI 来处理。

(2) 用 mod_rewrite 来分派需要处理的 URL 到 FastCGI.

例子:

VirtualHost 12.34.56.78

ServerName example.com

DocumentRoot /home/user/public_html

Alias /media /home/user/python/django/contrib/admin/media

RewriteEngine On

RewriteRule ^/(media.*)$ /$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]

/VirtualHost

这里指示的重写后的 url 就是上面 FastCGIExternalServer 中那个。

上述配置将不是 /media/ 开头的,或者指向不存在的文件的请求,转给了 FastCGI.

lighttpd 配置

lighttpd 天然的支持 FastCGI.

首先要确认你的 mod_fastcgi 在模块列表中,并且在 mod_rewrite 和 mod_access 后,在 mod_accesslog 前。

为了服务 admin media, 也许你还需要 mod_alias.

在 lighttpd 的配置文件中加如下一段:

server.document-root = "/home/user/public_html"

fastcgi.server = (

"/mysite.fcgi" = (

"main" = (

# Use host / port instead of socket for TCP fastcgi

# "host" = "127.0.0.1",

# "port" = 3033,

"socket" = "/home/user/mysite.sock",

"check-local" = "disable",

)

),

)

alias.url = (

"/media/" = "/home/user/django/contrib/admin/media/",

)

url.rewrite-once = (

"^(/media.*)$" = "$1",

"^/favicon\.ico$" = "/media/favicon.ico",

"^(/.*)$" = "/mysite.fcgi$1",

)

还可以在一个 lighttp 服务器上跑多个 Django. 只要为每一个应用指定一个独立的 FastCGI host.

如何在共享的 web hosting 上运行 Django / Apache:

编辑 .htaccess:

AddHandler fastcgi-script .fcgi

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]

再写一个 mysite.fcgi 的可执行的脚本:

#!/usr/bin/python

import sys, os

# Add a custom Python path.

sys.path.insert(0, "/home/user/python")

# Switch to the directory of your project. (Optional.)

# os.chdir("/home/user/myproject")

# Set the DJANGO_SETTINGS_MODULE environment variable.

os.environ['DJANGO_SETTINGS_MODULE'] = "myproject.settings"

from django.core.servers.fastcgi import runfastcgi

runfastcgi(method="threaded", daemonize="false")

在更新代码后,可以通过重新上传 mysite.fcgi 文件来指示 Apache 重启 Django 程序。

如果有 shell 权限,可以直接用 touch 命令改变时间戳:

touch mysite.fcgi

我有个linux的虚拟主机,我想运行django网站,怎么办?

我是linux主机,我这样在本地运行django

1在终端进入django项目的文件夹,是有manage.py的那个目录

2然后运行python manage.py runserver

就可以跑起来了

如何在服务器上部署Django项目并使其在后台一直运行

前几天老师让我把一个Django项目(爬虫网页)放到校园内网上,但是我想先用自己的服务器来尝试一下。之前刚好有在Digital Ocean上买过服务器用来运行ss脚本,平时服务器一直放着没啥用,所以就拿它来试验一下。

废话不多说,第一步通过WinSCP软件把Django文件传到服务器上。

在服务器中安装Django需要的环境和我所需要的Python第三方库。

以上所有步骤完成后,还需要进行一步操作,这是我经历的一个 坑 。 打开Django文件目录中的 settings.py,把 ALLOWED_HOSTS=[] 改为 ALLOWED_HOSTS=["*"] 。

在服务器中打开到 manage.py 所在的目录,输入命令:

python3 manage.py runserver 0.0.0.0:8000

然后按下回车,在浏览器中输入: 该服务器IP地址:8000 ,大功告成!

Attention:

1. python3 不是特定的,是根据你的Django项目所需要的环境指定的。

2. 8000 是端口号,可以修改。

如果想要Django项目一直运行,关闭终端后还在运行,即需要运行如下命令, nohup command, command 即位上文所说的 python3 manage.py runserver 0.0.0.0:8000 。

Django新手教程6,新建一个项目

感觉再不按套路出牌就要被群众围殴了,那咱么就开始吧。

打开CMD黑窗口,我们输入

workon django_env

我们先看看怎么在黑窗口里面穿梭于各个URL之间,你先看你现在所处的位置,一般来说,新打开的CMD,都是处于

C:/User/your_name

这个位置,我们先到D盘,根目录从C到D,我们只需要输入

D:

就可以到达D盘了,如果你的django_env是激活的那么,他会自动跳转到

D:/py_env/django_env

这个目录下,我们当然可以把项目就建在这里,但也可以建在别的地方。所以请输入(注意cd和两点之间有一个空格)

cd ..

cd是前往的意思,两个小点指的是父亲,意思是前往当前目录的父目录,

于是,我们来到

D:/py_env

目录下,再次输入

cd ..

于是我们达到

D:/

这已经是D盘的根目录的再输入cd ..已经没有什么效果了。如果你之前按照我的教程一步一步来,那么,你已经在在这个根目录上建好了一个叫django_project的空文件夹,如果你没有建好 ,那么请输入

mkdir django_project

创建一个这个文件夹,当然,你也可以在图形界面,打开我的计算机,然后到达位置右键新建文件夹。这里为了逼格和更加熟悉cmd窗口起见,我建议你还是用命令行。

我们cmd的路径(准确的说是工作路径)现在在D盘的根目录,

因此,请输入

cd django_project

表示前往 django_project ,当然,这个时候你得确定django_project是D盘根目录下的一个子目录。

如果,我们还处于

D:py_env/django_env

那么输入

cd django_project是无效的,你得按照我们刚才一步一步抵达D盘,然后在进入到django_project。或者,你可以直接输入绝对路径

cd D:/django_project

使用上面的命令,只要你处于D盘,无论是在哪一级的目录,都可以一步到位。

抵达现场,我们马上就要新建我们的项目了。

激动人心的一刻到了,请在CMD中输入

django-admin startproject mysite

这时,我们创建了一个项目,这个项目的名字叫mysite,等等,说好的做云盘,为毛名字不是mycloud呢?这就要提到django的精妙之处了,新建了一个项目,就相当于,我们在计算机上圈了一块地(D:/django_project/mysite目录以后就是我们网络服务这一块的地盘了),还没开始建展馆,为什么先圈地而不是直接新建一个展馆呢,因为我们圈了地就可以在地上建很多展馆啊,在django看来,云盘啥的,够不上称为一个项目,只能称之为应用(一座展馆),只有将很多展馆放在一起,才能称之为项目,也就是说,一个项目可以包含很多的应用(APP),比如我们的网站可以提供云盘服务,我们也可以,提供个人博客服务,我们还可以开一个讨论某植物的论坛啥的,反正就是为了将来能够提供全家桶服务,所以,云盘只能算做是一个APP。当然,目前我们只这块地上建一座提供云服务的展馆。其他的展馆以后再说。

还是在cmd黑窗口,请输入

dir

用这条指令可以列出当前目录下的子目录和存放文件的情况,

我们可以看到,生成一个叫mysite的子目录,实际上,在mysite的上面还有两个目录,一个目录是一个点,表示自己,也就是django_project本身,另一个目录是两个点,表示父目录,也就是D盘根目录。所以我们看到的是django_project目录的一家三代。

这和图形界面基本是统一的,下图的左上角圈的地方表示的就是父目录,至于本身目录嘛,就没必要刻意用什么图形表示了。

你用鼠标点击某个文件夹,实际上系统内部就是帮你运行了一下

cd 你点击的文件夹

你点击后退,则帮你运行

cd ..

回到正题,我们看到了一个mysite子目录,所以进去看看,请输入

cd mysite

然后输入

dir

查看情况

发现又有一个mysite目录,坑爹啊,俄罗斯套娃呢这是!

这一看就知道django是外国人搞得工具,子目录跟父目录叫同一个名字(好歹给子一级的目录起个名字叫mysite二世啥的行不。没办法,django设计者这么叫了,我们也不能随便乱改,以后我们把里面的那个mysite叫做子mysite,外面的那个叫父mysite以区分),仔细一看,旁边还有一个manage.py,先不不管这个,再进去子mysite看一下,还好,再没有mysite目录了,里面是

里面有4个py文件,看到没有,其中有一个是urls.py,URL之重要,需要专门一个文件来管理,如果你之前有认真看文章的话应该就能差不多猜到它是起什么作用的文件了。除了urls.py,settings.py也是非常重要的,都是用来管理mysite这个项目的,所以,我觉得最后这个mysite文件夹应该叫做mysite_manage因为它里面的东西,和它旁边的manage.py一样都是用来管理项目的。

为了让大家对项目结构有更清楚认识,我找了django官网上的图片

Django源码阅读 (一) 项目的生成与启动

诚实的说,直到目前为止,我并不欣赏django。在我的认知它并不是多么精巧的设计。只是由功能堆积起来的"成熟方案"。但每一样东西的崛起都是时代的选择。无论你多么不喜欢,但它被需要。希望有一天,python能有更多更丰富的成熟方案,且不再被诟病性能和可维护性。(屁话结束)

取其精华去其糟粕,django的优点是方便,我们这次源码阅读的目的是探究其方便的本质。计划上本次源码阅读不会精细到每一处,而是大体以功能为单位进行解读。

django-admin startproject HelloWorld 即可生成django项目,命令行是exe格式的。

manage.py 把参数交给命令行解析。

execute_from_command_line() 通过命令行参数,创建一个管理类。然后运行他的 execute() 。

如果设置了reload,将会在启动前先 check_errors 。

check_errors() 是个闭包,所以上文结尾是 (django.setup)() 。

直接看最后一句 settings.INSTALLED_APPS 。从settings中抓取app

注意,这个settings还不是我们项目中的settings.py。而是一个对象,位于 django\conf\__init__.py

这是个Settings类的懒加载封装类,直到 __getattr__ 取值时才开始初始化。然后从Settings类的实例中取值。且会讲该值赋值到自己的 __dict__ 上(下次会直接在自己身上找到,因为 __getattr__ 优先级较低)

为了方便debug,我们直接写个run.py。不用命令行的方式。

项目下建个run.py,模拟runserver命令

debug抓一下setting_module

回到 setup() 中的最后一句 apps.populate(settings.INSTALLED_APPS)

开始看 apps.populate()

首先看这段

这些App最后都会封装成为AppConfig。且会装载到 self.app_configs 字典中

随后,分别调用每个appConfig的 import_models() 和 ready() 方法。

App的装载部分大体如此

为了方便debug我们改写下最后一句

res的类型是Command django.contrib.staticfiles.management.commands.runserver.Command object at 0x00000101ED5163A0

重点是第二句,让我们跳到 run_from_argv() 方法,这里对参数进行了若干处理。

用pycharm点这里的handle会进入基类的方法,无法得到正确的走向。实际上子类Commond重写了这个方法。

这里分为两种情况,如果是reload重载时,会直接执行 inner_run() ,而项目启动需要先执行其他逻辑。

django 项目启动时,实际上会启动两次,如果我们在项目入口(manage.py)中设置个print,会发现它会打印两次。

第一次启动时, DJANGO_AUTORELOAD_ENV 为None,无法进入启动逻辑。会进入 restart_with_reloader() 。

在这里会将 DJANGO_AUTORELOAD_ENV 置为True,随后重启。

第二次时,可以进入启动逻辑了。

这里创建了一个django主线程,将 inner_run() 传入。

随后本线程通过 reloader.run(django_main_thread) ,创建一个轮询守护进程。

我们接下来看django的主线程 inner_run() 。

当我们看到wsgi时,django负责的启动逻辑,就此结束了。接下来的工作交由wsgi服务器了

这相当于我们之前在fastapi中说到的,将fastapi的app交由asgi服务器。(asgi也是django提出来的,两者本质同源)

那么这个wsgi是从哪来的?让我们来稍微回溯下

这个settings是一个对象,在之前的操作中已经从 settings.py 配置文件中获得了自身的属性。所以我们只需要去 settings.py 配置文件中寻找。

我们来寻找这个 get_wsgi_application() 。

它会再次调用 setup() ,重要的是,返回一个 WSGIHandler 类的实例。

这就是wsgiapp本身。

load_middleware() 为构建中间件堆栈,这也是wsgiapp获取se

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华为p7支持法语操作系统? 大白鲨HD6750 1GB GDDR5白金版这个显卡怎么样? 请高手们看看我的配置,加装显卡精影HD6670和HD6750哪个比较合适点... 蓝宝石HD 6750 1GB GDDR5白金版基本参数 ...HD5770 HD6750 HD6670 这几个显卡哪个好一些?大神们帮帮忙 蓝宝HD6750 1GB GDDR5白金版重要参数 ...是蓝宝石 HD6670 1G DDR5 白金版 HD6770 1G DDR5 白金版 HD6750 1G... 蓝宝石: HD6750/1G 黄金版和HD6670 1GB GDDR5白金版哪个好点啊?我的... 如何理解“从众”心理是一把“双刃剑”。 领动用5W30还是用5W40啊 pycharm如何运行django项目(pycharm创建django) django迁移项目后如何运行(启动django项目) 如何打开django项目(导入django项目) pycharm怎么运行Django项目(pycharm如何使用django) ...复试分数是多少?我女儿今年金融专硕初试考410分,能进入复试吗?_百 ... ...难度?计算机考研报录/分数/经验/参考书解析!专硕录取平均分405分... ...每次总是在杨紫曦出场的背景音乐 歌词就是哒哒滴滴... 求一个女生唱的歌词的调子是 哒哒嘀哒滴滴答答你只爱我一次,哒哒嘀哒哒... 哥哥姐姐们,fume 是什么意思 属虎的人幸运石和开运水晶 金发晶适合什么属相的人金发晶第一次戴要洗吗 属虎的戴什么水晶最好,属虎人一生佩戴什么好 wps表格怎么把几个窗口合并成一个? gl82021款陆上公务舱前后音响音量怎么调整? 别克gl8音响没声音怎么回事 倩女幽魂109刀客装备尽量是紫武器要鬼的双刀 尽量带武器名字属性和图片... 倩女幽魂刀客109那个装备有必要换鬼 除了武器 别告诉我全换 建议一个... 为什么苹果软件更新老说我密码错误。明明输入对了。 我还找回了一次密码... 为什么更新了 我登不上去 密码都是错误的 密码都对了可他还是说错 景什么纸业 如何导入django项目(pycharm如何导入django项目) pythom怎么运行别人的django(2023年最新整理) 怎么运行django程序(django如何运行) Mastercam的刀路工具栏不见了,怎么办? 苹果15报价 江湖味十足的诗词都有哪些 统帅电器的家电产品全吗?都有哪些? ...外国歌曲,调子好像是“答滴答,答滴答,答滴答滴答滴答;答滴答,答滴 ... ...嘀滴滴答滴答,然后是什么“哈” 求这首歌的歌名! 求一首歌 一颗是歌词就是滴答滴答滴答滴答 好像是北京爱情故事里的插... 牙龈瘤鉴别诊断 乳化液膜乳化液膜体系的组成 汽车乳化是什么意思? 公共直流母线公共直流母线使用注意事项 ...设计说出线电缆用5根3*300+1*150的电缆或用母线。 彭于晏几线明星 彭于晏在台湾属于一线偶像明星吗? 从头到脚要美丽的内容简介 《黄帝内经》中女人养颜经内容简介 马化腾身家超马云刘强东之和,是如何做到的?