创建项目project
创建learning_log项目
- 在terminal中进入项目路径(manage.py所在文件夹,后面用project_path$表示),输入如下指令:
project_path$ django-admin startproject libnotes .
- settings: 指定Django如何与系统交互及如何管理项目
- urls: 告诉Django应创建哪些网页来响应浏览器请求
- wsgi: 帮助Django提供它创建的文件,web server gateway interface(web服务器网关接口)
试运行server,并自动创建db.sqlite3数据库文件
- 在terminal中输入如下指令:
project_path$ python manage.py runserver
- 复制terminal中“Starting development server at http://...:8000/”到浏览器,查看效果
- 此时项目路径中会自动生成db.sqlite3,创建一个名为0001_initial.py的迁移文件
数据库的实施应用
- 在terminal中输入如下指令
project_path$ python manage.py makemigrations # 会提示没有需要更新的数据
project_path$ python manage.py migrate # 应用上个模块中生成的迁移文件
创建超级管理员
- 在terminal中输入如下指令:
project_path$ python manage.py createsuperuser
AdminName@Password
创建应用程序app: /notes/
创建app
- 在terminal中输入如下指令:
project_path$ python manage.py startapp learning_logs
- models: 定义我们要在应用程序中管理的数据,告诉Django如何处理应用程序中存储的数据。代码层面models就是类,有属性和方法
- admin
- view
激活模型,配置
- 修改settings中installed_apps, 让Django将应用程序app包含到项目project中
INSTALLED_APPS = ['notes',] # settings里增加app
- 同时修改settings中的TEMPLATES属性中的DIRS和APP_DIES
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True, # True: 先根据DIRS搜索,找不到再到各个应用的templates目录找,False:不再搜索应用的templates目录
项目urls中加入应用地址
from django.urls import include
urlpatterns = [path('notes/', include('notes.urls', namespace='notes')),]
# urlpatterns = [path('notes/', include('notes.urls', "notes"), namespace='notes')),],app_name被放到下面的子路径中
在应用中创建子页面:/note/about/
给子页面增加路径文件
- 在应用文件夹中增加urls.py
- 在子页面的路径增加视图view路径(代码如下),此处直接调用TemplateView的包所以不用import自写的view包
from django.urls import path
from django.views.generic import TemplateView
app_name = "notes"
urlpatterns = [
path('about/', TemplateView.as_view(template_name="notes/about.html"), name='about'),
]
方案一:配置需调用的静态文件(css/fonts/image/js)
- 修改settings中的TEMPLATES属性中的STATICFILES_DIRS
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "common_static"),
]
- 方案二:还可以参考# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, "collected_static")
给about页面增加template
- project目录中创建templates文件夹
- templates文件夹中创建about.html
- 在.templates/notes/about.html中写入template代码
编写基于类的视图
创建基于TemplateView类的AboutView类,可以自己修改类内功能
修改app应用路径中的views.py文件
from django.views.generic import TemplateView
class AboutView(TemplateView):
template_name = "notes/about.html"
# 可以理解为AboutView是个专用类,此处可以定义抓用类的template名字,而TemplateView是个公用类,所以每次调用都需要定义模板名字
再修改应用urls中的urlpatterns调用函数
urlpatterns = [
path('about/', AboutView.as_view(), name="about")
# path('about/', TemplateView.as_view(template_name="notes/about.html"),name='about'),
]
数据库交互
创建数据模型
-
在app应用路径中的models.py创建Notes类
-
其中用到slugify
作用:用于将字符串中的所有空格替换成连接符(-),并将所有字符转换为小写。 这样其实就生成了一个 slug ,可以很好的用于创建URL
空格在URL中不被允许
- 数据库中会生成notes_notes, 即appName_className
- 创建好模型之后,执行迁移数据,完成数据库更新
python manage.py makemigrations
# 创建一个名为0001_initial.py的迁移文件,可以在上面数据库中增加
python manage.py migrate
# 应用这种迁移
-
参阅https://docs.djangoproject.com/en/1.8/ref/models/fields
-
Operation to perform:
- Synchronize unmigrated apps: 同步未迁移文件
- Apply all migrations: 应用迁移
查看数据库数据结构
- 进入数据库,进入项目路径,terminal中输入如下信息
sqlite3 db.sqlite3
# 进入数据库环境,显示为sqlite>
- 查看数据库所有的数据表
sqlite>.tables
- 查看某个表的结构
sqlite>pragma table_info(notes_notes);
- 选择一个数据表用SQL语句插入一条数据
sqlite>insert into notes_notes(title, slug, overview, created, user_id) values (" django web", "django-web", "add model test", "2020-06-11", 1);
- 从表notes_notes数据表中选择所有的数据
sqlite>select * from notes_notes;
- 退出sqlite环境
sqlite>.quit