Django Demo:项目创建和项目结构

Django 项目

项目创建

django-admin startproject [projectname]

文件结构

此时,在当前目录或者指定的目录下会创建对应名称的项目,根目录即为项目名,可以修改。例如我们创建了一个 mysite 的 django 项目,则文件结构如下:

mysite/
	manage.py
	mysite/
		settings.py
		urls.py
		asgi.py
		wsgi.py

每个文件的意义如下:

文件名意义
mysite/最外层的 mysite 目录这是整个项目的根目录,这个目录名称可以修改,不会对项目造成影响
manage.py进行项目管理,例如启动等项目操作的一个命令行工具
mysite/内层的 mysite 目录是当前的Django项目真正的python package,在完成编写之后,我们根据这个package的名称来进行相关模块的调用例如:import mysite.some_module
mysite/settings.pyDjango项目的相关配置
mysite/urls.py这个Django项目的相关 url 生命
mysite/asgi.py使用ASGI支持的网页服务器时,对应的接口python文件
mysite/wsgi.py使用WSGI支持的网页服务器时,对应的接口python文件

本地开发使用服务器

我们通过使用 manage.py 文件进行项目的启动等操作。首先,当创建完Django项目之后,可以在根目录下面通过下面的命令启动Django开发用的一个轻量级的网页服务器,使用纯python代码编写:

python manage.py runserver

输出结果如下:

 Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
August 13, 2020 - 17:28:05
Django version 2.2, using settings 'django_test.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

可以看到,打印出来的信息中,提供了这个网页服务器的网址,即本机默认的ip地址 127.0.0.1 以及服务器使用的默认端口 8000,你也可以指定端口,例如:

python manage.py runserver 8080

如果你想要修改指定的ip地址的话,需要同时给出端口号:

python manage.py ruserver 0.0.0.0:8000

对于 runserver 来说,当每次接收到请求的时候,服务器都会重新加载 python 代码,因此可以直接在服务器运行的过程中进行代码的修改,无需重启生效

App

创建的好的项目即为进行 Django Web 应用开发的环境。App就是在项目环境中进行编写的,也就是我们的Web 应用,可以是一个简单的日志系统,一个公共记录的数据库,也可以是一个简单的投票应用。项目即为若干个App和相关配置文件的集合,也就是说,一个项目对应一个或者多个App,并且反过来,一个App也可以包含在不同的项目之中,也就是说你的App可以在你的任何一个Python路径下面,即,你可以在当前的目录中引入其他目录下面的App。

创建App

当你创建App时,Django 提供相应的工具自动搭建App的目录文件结构,例如创建一个 poll 投票项目:

python manage.py startapp poll

这个命令将会在 manage.py 同一级的目录下面创建下面结构的App目录:

poll/
	__intit__.py
	admin.py
	apps.py
	migrations/
		__init__.py
	models.py
	tests.py
	views.py

这就是一个 Django 框架下面的 App 的目录结构。

编写View

通过下面的简单的代码,可以通过创建一个 HttpResponse 对象来表示一个 Django 最为简单的视图:

from django.http import HttpResponse

def index(request):
	return HttpResponse("Hello, world. You are at the polls index.")

URL 配置

polls/ ,即应用目录下面创建一个 urls.py 的文件:

from django.urls import path

from . import views
# define the pattern of your url
urlpatterns = [
	path('',  views.index, name='index'),
]

其中,urlpatterns 是一个我们定义的 url 的映射列表。
path 函数的参数为:

  • route:必要参数,字符串类型,url 的模板(pattern),可以包含多个模板。

当 Web 服务器接收一个Http 请求的时候,Django 会按顺序将请求的 urlurlpattern 中的模板依次比较,直到找到相匹配的模板时为止。Django 在这个过程中,不会对路径中的 GETPOST 方法携带的变量(例如 ?page=3),以及域名进行处理

  • view:这里可以是一个 view 函数,也可以是 as_view() 返回的基于类的视图(class-based view)。也可以是下面会涉及到的 django.urls.include 返回的一个 inclusion
  • kwargs:任意的关键字参数
  • name:表明这个 url 的名称

接下来,我们需要在整个项目的 url 配置中给出对应到这个app的urls的指向:

from django.contrib import admin
form django.urls import include, path

urlpatterns = [
	path('polls/', include('polls.urls')),
	path('admin/', admin.site.urls)),
]

其中,include 函数用来来引入另一个app中的 urls,将和当前匹配的项(例如 polls)去除掉之后,将剩下的字符串传递给下一级路由的 urlconf 进行判断,即目标页面对应的 urls 模块中的 urlpattern 进行判断。

我们通过 include 函数来引入另一个app中的 urls,将与当前的 urlpattern 列表中匹配的 url 从请求的 url 中剔除,将下一级的内容作为接下来在目标页面对应的app的 urls.py 文件中进行匹配的对象。即从当前的这样可以实现每一级的路由策略分离。例如对于一个这样的请求 polls/result/,此时当前页面为 polls.views,这时,Django 将会把这个路径和 polls 这个app中的 urls.py 文件中的 urlpattern 列表中的每一个模板进行匹配,这时,将这个
最后,同样:

python manage.py runserver

你将会看到页面输出为:

Hello world, You are at the polls index.

最终的项目文件结构

mysite/
	manage.py
	mysite/
		settings.py
		urls.py
		asgi.py
		wsgi.py
	poll/
		...
	logsystem/
		...
	app_n/
		...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值