创建APP
在Django中的一个app代表一个功能模块。开发者可以将不同功能的模块放在不同的app中, 方便代码的复用。app就是项目的基石,因此开发博客的第一步就是创建新的app,用来实现跟文章相关的功能模块。
打开命令行,进入项目所在的目录:(注意Django的操作必须在虚拟环境下进行)
D:\django_project>env\Scripts\activate.bat
(env) D:\django_project>
进入 my_blog 目录 :
(env) D:\django_project>cd my_blog
(env) D:\django_project\my_blog>
输入python manage.py startapp article
指令,创建名为article
的app:
查看一下my_blog
文件夹,应该看到这样的结构:
my_blog │ db.sqlite3 │ manage.py │ ├─article │ │ admin.py │ │ apps.py │ │ models.py │ │ tests.py │ │ views.py │ │ __init__.py │ │ │ └─migrations │ └─ __init__.py │ └─my_blog │ settings.py │ urls.py │ wsgi.py └─ __init__.py
项目结构分解如下:
-
根目录
my_blog
下有两个文件:db.sqlite3是一个轻量级的数据库文件,用来存储项目产生的数据,比如博客文章;manage.py是项目执行命令的入口,比如runserver。 -
目录
article
是刚创建出来的app,用来放置博客文章相关的代码:后台管理文件admin.py
,数据模型文件models.py
,视图文件views.py
,存放数据迁移文件的目录migrations
。 -
根目录下还有一个
my_blog
目录,其中的settings.py包含项目的配置参数,urls.py则是项目的根路由文件
注册APP(settings)
打开 Pycharm ->open project
打开my_blog
目录的settings.py
,找到INSTALLED_APPS
写入如下代码:
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'article'
]
配置访问路径(urls)
然后再给app配置访问路径url。
url可以理解为访问网站时输入的网址链接,配置好url后Django才知道怎样定位app。
打开my_blog
目录下的urls.py
,增加以下代码:
from django.contrib import admin
from django.urls import path ,include
urlpatterns = [
path('admin/', admin.site.urls),
path('article/', include('article.urls', namespace='article')),
]
path为Django的路由语法:
- 参数
article/
分配了app的访问路径; include
将路径分发给下一步处理;namespace
可以保证反查到唯一的url,即使不同的app使用了相同的url(后面会用到)。
记得在顶部引入include
。
在开发环境下,article的url为:http://127.0.0.1:8000/article/
还没结束。现在我们已经通过path
将根路径为article
的访问都分发给article这个app去处理。但是app通常有多个页面地址,因此还需要app自己也有一个路由分发,也就是article.urls
了。
article可以有多个页面,如列表页面、详情页面等,那么就需要如下两个url:
http://127.0.0.1:8000/article/list/
http://127.0.0.1:8000/article/detail/
app中的url.py就是用来区分它们的。
在app生成时并没有这个文件,因此需要自己在article
文件夹中创建urls.py
,在里面输入:
# 引入path
from django.urls import path
# 正在部署的应用的名称
app_name = 'article'
urlpatterns = [
]
urlpatterns
中暂时是空的,没写入任何路径的映射,不着急以后会写。