- py -m django --version查询django的版本
- django-admin startproject mysite这行代码将会在当前目录下创建一个 mysite 目录
- 目录结构
mysite/ 项目容器
manage.py 管理 Django 项目的命令行工具
polls 投票应用
mysite/ 包含你的项目,它是一个纯 Python 包
init.py
settings.py Django 项目的配置文件
urls.py Django 项目的 URL 声明,就像你网站的“目录”from django.contrib import admin from django.urls import include, path urlpatterns = [ path('polls/', include('polls.urls')), path('admin/', admin.site.urls), ]
wsgi.py 作为你的项目的运行在 WSGI 兼容的Web服务器上的入口 - py manage.py runserver 本机ip地址 开放端口 运行框架
ps本机IP在setting里设置
ALLOWED_HOSTS = [ ‘192.168.1.115’,‘localhost’,‘0.0.0.0:8000’,‘127.0.0.1’]
局部网可以访问 - 创建投票应用
py manage.py startapp polls 创建一个polls应用:
polls/
init.py
admin.pyfrom django.contrib import admin from .models import Question admin.site.register(Question)
urls.pyfrom django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), ]
apps.pyINSTALLED_APPS = [ 'polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
migrations/
init.py
models.pyfrom django.db import models class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
tests.py
views.pyfrom django.http import HttpResponse def index(request): return HttpResponse("Hello, world. You're at the polls index.")def detail(request, question_id): return HttpResponse("You're looking at question %s." % question_id) def results(request, question_id): response = "You're looking at the results of question %s." return HttpResponse(response % question_id) def vote(request, question_id): return HttpResponse("You're voting on question %s." % question_id)
这个目录结构包括了投票应用的全部内容 - 配置数据库
- 设置时区‘UTF’是格林威治时间我们应该设置为TIME_ZONE = ‘Asia/Shanghai’
- py manage.py migrate ps:这个 migrate 命令检查 INSTALLED_APPS 设置,为其中的每个应用创建需要的数据表
- 创建两个模型question对象和choice对象
- 激活模型,配置apps,安装polls应用
- 检验py manage.py makemigrations polls输出:
Migrations for ‘polls’:
polls/migrations/0001_initial.py:- Create model Choice
- Create model Question
- Add field question to choice
ps:0001_initial.py是模型的迁移数据
- py manage.py sqlmigrate polls 0001输出:BEGIN;
–
– Create model Choice
–
CREATE TABLE “polls_choice” (
“id” serial NOT NULL PRIMARY KEY,
“choice_text” varchar(200) NOT NULL,
“votes” integer NOT NULL
);
–
– Create model Question
–
CREATE TABLE “polls_question” (
“id” serial NOT NULL PRIMARY KEY,
“question_text” varchar(200) NOT NULL,
“pub_date” timestamp with time zone NOT NULL
);
–
– Add field question to choice
–
ALTER TABLE “polls_choice” ADD COLUMN “question_id” integer NOT NULL;
ALTER TABLE “polls_choice” ALTER COLUMN “question_id” DROP DEFAULT;
CREATE INDEX “polls_choice_7aa0f6ee” ON “polls_choice” (“question_id”);
ALTER TABLE “polls_choice”
ADD CONSTRAINT “polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id”
FOREIGN KEY (“question_id”)
REFERENCES “polls_question” (“id”)
DEFERRABLE INITIALLY DEFERRED;
COMMIT;这是一个sql语句我不懂数据库,大概意思是创建了choice,question,和二者相关联的数据模型,Add field question to choice
–这个我得电脑没有输出,不知道是什么原因,我没有安装数据库
迁移是非常强大的功能,它能让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表 - 它专注于使数据库平滑升级而不会丢失数据。我们会在后面的教程中更加深入的学习这部分内容,现在,你只需要记住,改变模型需要这三步:
编辑 models.py 文件,改变模型。
运行 python manage.py makemigrations 为模型的改变生成迁移文件。
运行 python manage.py migrate 来应用数据库迁移。
数据库迁移被分解成生成和应用两个命令是为了让你能够在代码控制系统上提交迁移数据并使其能在多个应用里使用;这不仅仅会让开发更加简单,也给别的开发者和生产环境中的使用带来方便。
13. py manage.py shell进入python交互命令行可以编程使用api接口,quit()退出
14. 介绍 Django 管理页面
- py manage.py createsuperuser创建管理员账号
- py manage.py runserver启动服务
- “http://127.0.0.1:8000/admin/” 浏览器进入管理员登录界面
- 向管理页面中加入投票应用,我们得告诉管理页面,问题 Question 对象需要被管理。打开 polls/admin.py 文件,把它编辑
- 添加视图detail,results,vote
- 添加视图对应的urls,# ex: /polls/
path(’’, views.index, name=‘index’),
# ex: /polls/5/
path('<int:question_id>/', views.detail, name='detail'),
# ex: /polls/5/results/
path('<int:question_id>/results/', views.results, name='results'),
# ex: /polls/5/vote/
path('<int:question_id>/vote/', views.vote, name='vote'),