《Python编程从入门到实践》学习笔记——Django
内容包括【1.建立项目】与【2.创建应用程序】
1.发现电脑(win7_64位)里已经安装了python3.8.1
2.将python目录(D:\python)加入path环境变量
3.在F盘新建文件夹learning_log,并从命令行界面进入learning_log
4.创建虚拟环境:python -m venv ll_env,成功。
5.激活虚拟环境:ll_env\Scripts\activate
注:停用虚拟环境用deactivate
6.安装Django:pip install Django(安装了3.0.4版本)
7.创建learning_log项目:django-admin startproject learning_log .
注:learning_log后面要加.,如果忘记加了,删掉learning_log重新执行该步骤
8.检查目录内容:dir
9.创建数据库:python manage.py migrate
10.检查目录内容:dir
11.查看项目:python manage.py runserver
注:检查check确认正确地创建了项目,指出使用的Django版本以及当前使用的设置文件名,指出项目的URL(http://127.0.0.1:8000表示在计算机localhost的端口8000上侦听请求)
注:localhost服务器只处理当前系统发出的请求而不允许其他人查看你正在开发的网页
注:浏览器网址栏输入http://localhost:8000或者http://127.0.0.1:8000
注:如果出现错误消息端口已被占用,执行命令python manage.py runserver 8001或其他更大的端口号,直到找到可用的端口
注:不要关闭服务器,下面还要用
1.重新打开一个终端窗口,切换到manage.py所在目录:直接该目录shift+右键——在此处打开命令窗口
2.激活虚拟环境:ll_env\Scripts\activate
3.建立创建应用程序所需的基础设施:python manage.py startapp learning_logs
4.查看目录:dir
[定义模型(5)]:
5.定义模型:在notepad++中打开models.py
在
from django.db import models
# Create your models here.
下面添加
class Topic(models.Model):
"""用户学习的主题"""
text=models.Charfield(max_length=200)
date_added=models.DateTimeField(auto_now_add=True)
def __str__(self):
"""返回模型的字符串表示"""
return self.text
注:查看模型中可使用的字段https://docs.djangoproject.com/en/1.8/ref/models/fields
6.将前面的应用程序添加进来:在notepad++中打开settings.py
找到
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
修改为
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# My apps
'learning_logs',
]
7.确定如何修改数据库:python manage.py makemigrations learning_logs
8.应用迁移,让Django替我们修改数据表:python manage.py migrate
注:确认learning_logs应用迁移时一切正常(OK)
注:每当需要修改“学习笔记”管理的数据时,都采用如下三个步骤:
①修改models.py——步骤5修改+步骤6添加应用程序进入项目
②对learning_logs调用makemigrations——步骤7让Django修改数据库使之存储与模型有关的信息
③让Django迁移项目——让Django修改数据库应用上面的那种迁移
[Django管理网站]
9.创建超级用户:python manage.py createsuperuser
注:输入用户名ll_admin,电子邮件地址可为空,密码两次输入
10.向管理网站注册模型:打开admin.py
在
from django.contrib import admin
# Register your models here.
下面添加
from learning_logs.models import Topic
admin.site.register(Topic)
注:先导入要注册的模型Topic,再使用admin.site.register()让Django通过管理网站管理我们的模型
注:通过超级用户访问管理网站:http://localhost:8000/admin,输入账号密码
11.添加主题:Topics——Add——Chess——Save——Add——Rock Climbing——Save
[定义模型Entry]
12.打开models.py
增加类如下:
class Entry(models.Model): #继承Django基类Model
"""学到的有关某个主题的具体知识"""
topic = models.ForeignKey(Topic,on_delete=models.CASCADE) #第一个属性topic是一个外键实例,准备让每个主题创建时分配给它一个键
text = models.TextField() #属性text是一个TextField实例,不限长度
date_added = models.DateTimeField(auto_now_add=True) #属性date_added实现按创建顺序呈现条目并在每个条目旁边放置时间戳
class Meta: #嵌套Meta类,存储用于管理模型的额外信息
verbose_name_plural = 'entries' #让Django在需要时使用Entries来表示多个条目
def __str__(self):
"""返回模型的字符串表示"""
return self.text[:50]+"..." #由于条目包含的文本可能很长,只显示前50个字符并用省略号表示显示的并非整个条目
13.确定该如何修改数据库:python manage.py makemigrations learning_logs
注:生成迁移文件
14.应用这种迁移修改数据库:python manage.py migrate
注:根据迁移文件应用迁移
15.打开admin.py,
添加admin.site.register(Entry),
修改from learning_logs.models import Topic为from learning_logs.models import Topic,Entry
16.查看:http://localhost:8000/admin/
在Entries中添加三条目,两条chess相关,一条rock climbing,用来作为初始数据
Django shell通过交互式终端会话以编程方式查看数据
17.启动Python解释器:python manage.py shell
from learning_logs.models import Topic ---->导入模块learning_logs.models中的模型Topic
Topic.objects.all() ---->获取模型Topic的所有实例
此时会返回一个列表,称为查询集(queryset)
18.通过遍历列表一样遍历查询集的方法查看分配给每个主体对象的ID:
topics=Topic.objects.all() ---->将返回的查询集存储在topics中
for topic in topics:
print(topic.id, topic) ---->打印每个主题的id属性和字符串表示
连续回车,查看主题的ID和主题名
19.知道对象ID后查看主题Chess的属性text和date_added的值:
t=Topic.objects.get(id=1) ---->查看ID为1的主题
t.text ---->查看主题的属性text
t.date_added ---->查看主题的属性date_added
20.查看与主题相关联的条目:
因为模型Entry定义了属性topic,该属性是一个ForeignKey外键,将条目与主题关联起来。利用该关联,能够获取与特定主题相关联的所有条目
t.entry_set.all()
注:修改模型后要重启shell才能看到修改后的效果。退出Ctrl+z,并回车
①为Entry类设置条目长度超过50字符才添加省略号
把原来的
def __str__(self):
"""返回模型的字符串表示"""
return self.text[:50]+"..."
改成
def __str__(self):
"""返回模型的字符串表示"""
if len(self.text)<=50:
return self.text
else:
return self.text[:50]+"..."
②新建一个名为pizzeria的项目,添加一个名为pizzas的应用程序。
定义一个名为Pizza的模型,它包含字段name,用于存储比萨名称,如Hawaiian和Meat Lovers。定义一个名为Topping的模型,它包含字段pizza和name,其中字段pizza是一个关联到Pizza的外键,而字段name用于存储配料,如pineapple,Canadian bacon,sausage。
向管理网站注册这两个模型,并使用管理网站输入一些比萨名和配料,使用shell来查看输入的数据。
(已完成,可跳转)