下面所有内容来自《Python编程:从入门到实践》,如有侵权请联系
一、创建 Django 项目
下面都是我试用过的命令,非常顺利,如果遇到麻烦,请参考大佬文章:
https://blog.csdn.net/qq_43192337/article/details/124611507
创建一个文件 learning_log
进入该文件后,执行下面语句,来创建虚拟环境
python -m venv ll_env
运行了模块venv,并使用它来创建一个名为ll_env的虚拟环境
继续,激活虚拟环境
ll_env\Scripts\activate
关闭虚拟环境
deactivate
在虚拟环境汇中,安装Django
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django==2.2.8
在Django中创建项目
django-admin.py startproject learning_log .
创建数据库
python manage.py migrate
在虚拟环境中启动服务
python manage.py runserver
启动后浏览器中
http://localhost:8000/
或者 http://127.0.0.1:8000/
成功!
二、创建应用程序
老规矩,附上大佬文章,感谢帮助:
https://blog.csdn.net/qq_43192337/article/details/124627877?spm=1001.2014.3001.5502
在保证启动服务的同时,打开另外cmd窗口,激活虚拟环境,新增 learning_logs 文件夹
ll_env\Scripts\activate
python manage.py startapp learning_logs
最重要的文件是models.py、admin.py和views.py。使用 models.py 来定义程序中管理的数据
每当需要修改该项目管理的数据时,都采取如下三个步骤:
修改models.py;对 learning_logs调用 makemigrations;让Django迁移项目
2.1 定义模型
在 models.py 中
from django.db import models
class Topic(models.Model):
# 用户学习的主题
# 需要存储少量的文本,如名称、标题或城市时,可使用CharField
text = models.CharField(max_length=200)
# DateTimeField—记录日期和时间的数据
# 实参auto_add_now = True表示每当用户创建新主题时属性自动设置成当前日期和时间。
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
# 返回模型的字符串表示
return self.text
2.2 激活模型
要使用模型,必须让 Django 将应用程序包含到项目中
打开settings.py文件(learning_log/learning_log中)
在 INSTALLED_APPS 中添加 ‘learning_logs’
Django 修改数据库,用于存储与模型 Topic 相关的数据
python manage.py makemigrations learning_logs
应用这种迁移,让 Django 来修改数据库
python manage.py migrate
2.3 Django 管理网站
2.3.1 在 Django 中创建超级用户,并设置账号密码
python manage.py createsuperuser
2.3.2 向管理网站注册模型
Django自动在管理网站中添加了一些模型,如User和Group,但对于我们创建的模型,必须
手工注册
找到 learning_logs\admin.py ,向管理网站注册Topic
from django.contrib import admin
from learning_logs.models import Topic
admin.site.register()来让 Django 通过管理网站来管理模型
admin.site.register(Topic)
访问
http://localhost:8000/admin/
输入账号密码,可以进来
最后,Topics就是我们自己创建的模块啦,在 Topics 里面添加两个主题 Chess 和 Rock Climbing
2.3.3 定义模型Entry
要记录 Chess 和 Rock Climbing 的知识内容,需要为用户在笔记中添加的条目定义模型。每个条目都与特定主题相关联,关系为多对一,多个条目关联同一主题。
在 learning_logs\models.py 中
class Entry(models.Model):
'''
topic是一个ForeignKey实例(数据库外键,引用了数据库中的另一条记录)
将每个条目关联到特定的主题,每个主题在创建时都分配一个ID
'''
topic = models.ForeignKey(Topic, on_delete = models.CASCADE)
text = models.TextField()
''' 属性date_added让我们能够按创建顺序呈现条目,并在每个条目旁边放置时间戳 '''
date_added = models.DateTimeField(auto_now_add=True)
''' Meta类存储用于管理模型的额外信息 '''
class Meta:
'''
当Django在需要时使用Entries来表示多个条目。
如果没有这个类,Django将使用Entrys来表示多个条目。
'''
verbose_name_plural = 'entries'
'''__str__()告诉Django,呈现条目时显示哪些信息。这里只显示text的前50个字符。'''
def __str__(self):
return self.text[:50] + "..."
对于 verbose_name_plural 的 理解看上面链接,大佬的文章里面讲到了,很详细 ~
2.3.4 迁移模型 Entry
新模型,因此需要再次迁移数据库,重复上面 Topic 的三步(黄色标记部分)
python manage.py makemigrations learning_logs
python manage.py migrate
生成了一个新的迁移文件——0002_entry.py,它告诉Django如何修改数据库,使其能够存储
与模型Entry相关的信息
2.3.5 向管理网站注册 Entry
learning_logs\admin.py
成功!
三、认识 Django shell
交互式环境称为Django shell,是测试项目和排除其故障的理想之地
python manage.py shell
例如书上有这样一个例子:
Ctrl + Z 退出 shell 会话
现在理解为什么shell是测试项目和排除其故障的场所了,利用python语法环境来直接检测。