WSGI
WSGI:(Web Server Gateway Interface,Web 服务端网关接口)。在不借助框架的情况下,直接使用 WSGI 来开发简易服务端。
# hello.py |
# server.py |
运行:python3 server.py
[21:32:30] ~/workspace/demo ❱❱❱ python3 server.py |
http://localhost:8000/
macOS 安装 Django
Python 版本与 Django 版本的关系
安装 Django 1.11,对应 Python2:
sudo python -m pip install Django |
安装最新版 Django 3.1,对应 Python3:
python3 -m pip install Django |
查看版本:
python -m django --version |
创建 Django 项目
创建一个名为 mysite 的 Django 项目
django-admin startproject mysite |
在没有安装 1.11 版本的 Django 时,提示未找到命令:zsh: command not found: django-admin
解决方式:使用 python3 -m django
替代 django-admin
python3 -m django startproject mysite |
原因:运行命令 django-admin startproject mysite
时,系统将去 /usr/local/bin
目录找可执行文件 django-admin,安装 Django 3.1 时,没有自动将可执行文件django-admin
软链(符号链接)到 /usr/local/bin
,所以直接运行不好使,而使用 python3 -m django
,m 含义module,将在 /Library/Frameworks/Python.framework/Versions/3.7
下的site-package 中查找
的 目录找此命令,找不到。安装 Django 1.11 后,此命令可以使用
- 命令关键字:startproject
mysite 结构:
mysite/ |
启动项目:
python3 manage.py runserver |
- runserver:Django 根据 manage.py 后的参数来启动
查看是否启动成功:
http://127.0.0.1:8000/ |
创建投票应用
python3 manage.py startapp polls |
- 命令关键字:startapp
mysite/ |
# apps.py |
视图层
# views.py |
Django 3.1
# polls/urls.py |
# mysite/urls.py |
- Django 3.1 path() 第一个参数为 route
Django 1.11 需要新增 urls.py,path 格式略微不同
# polls/urls.py |
# mysite/urls.py |
- Django 1.11 path() 第一个参数为 regex
启动:
python3 manage.py runsever |
测试:
http://localhost:8000/polls/ # polls/ 对应 polls.urls |
模型层
在 Django 里写一个使用数据库的 Web 应用的第一步是定义模型,Django 遵循 DRY Principle(不要重复地造轮子 Don’t repeat yourself)。Django 默认使用 SQLite 数据库。
# mysite/settings.py |
# polls/models.py |
一个 Model(模型)对应一个表,一个 Field 对应一个表字段
Question 为
django.db.models.Model
类的子类,question_text 为 Field 的子类
在 settings.py 中配置我们添加的 polls App
# settings.py |
migrate「迁移」
执行 makemigrations 命令,将根据 models.py 生成一个对数据库修改的记录,称为「迁移」,修改 models.py 后,多次执行,将生成多个「迁移」
python3 manage.py makemigrations polls |
mysite/ |
# 0001_initial.py |
可通过 sqlmigrate 命令查看「迁移」对应的 SQL
python3 manage.py sqlmigrate polls 0001 |
执行迁移文件,相当于执行对应 sql,将更新数据库
python3 manage.py migrate |
- 数据保存在 db.sqlite3 这个文件中?
- 项目启动后,将直接执行对 model 的修改。相当于执行 migrate,但不执行 makemigrations?重启项目不会自动执行 migrate 相关命令(修改了 comment 改为了 artical_comment,直接修改 comment 报错)
- 使用 migrate 的好处是?
(ENV) [18:50:42] ~/workspace/demo-project git(master) ❱❱❱ python manage.py runserver |
Admin
Admin 为 Django 自带应用,默认在启动时也将启动
# settings.py |
# mysite/urls.py |
- 所以使用 http://localhost:8000/admin/ 可打开 admin
创建管理员账号:
python3 manage.py createsuperuser |
在 admin 中显示模型,用于图形化管理模型
# admin.py |
- 不用重启
在视图层使用模型
# views.py |
http://localhost:8000/polls/,浏览器输出
What's up |
API / Shell
进入 shell
python3 manage.py shell |
shell 命令:查、增、改
>> from polls.models import Choice, Question |
为模型添加自定义方法
# models.py |
使用自定义方法,shell 命令:查、增、外键
> from polls.models import Choice, Question |