Django学习笔记
Web应用程序
一、环境配置
建立虚拟环境:
终端,到指定目录
【python -m venv ll_env】
运行模块venv,创建了一个名为ll_env的虚拟环境
(若出错可安装virtualenv: $pip install --user virtualenv
切换目录,再virtualenv ll_env,
多个版本要选择合适的版本:virtualenv ll_env --python=python3)
激活虚拟环境:
【Windows:ll_env\Scripts\activate】
Linux:source ll_env/bin/activate
停止使用:
deactivate
安装Django:
【(创建并激活虚拟环境情况下)pip install Django】
二、在Django中创建项目
在虚拟环境中:
【django-admin startproject learning_log .】
【注意末尾的句点,使得文件目录合适】
(Linux下用ls,Windows下用dir显示当前文件内的文件)
工程目录: learning_log manage.py ll_env
//
__init__.py
settings.py 指定Django如何与你的系统交互、如何管理项目
urls.py 告诉Django应创建哪些网页来响应浏览器请求
wsgi.py 帮助Django提供它创建的文件(web server gateway interfaceWeb服务器网关接口)
三、创建数据库
【python manage.py migrate】
根目录下出现一个db.sqlite3的文件
SQLite是一种使用单个文件的数据库
四、查看项目
【python manage.py runserver】
打开浏览器,localhost:8000
五、创建应用程序
再打开一个终端
激活虚拟环境
【python manage.py startapp learning_logs】
让Django建立创建应用程序所需的基础设施
定义模型
models.py定义要在应用程序中管理的数据
一个模型就是一个类
1 class Topic(models.Model): 2 """用户学习的主题""" 3 text = models.CharField(max_length=200) #数据库预留200字符空间 4 date_added = models.DateTimeField(auto_now_add=True) #自动添加时间 5 6 def __str__(self): 7 """返回模型的字符串表示""" 8 return self.text
激活模型
打开settings.py
1 INSTALLED_APPS = [ 2 --snip-- 3 'django.contrib.staticfiles', 4 5 #my application 6 'learning_logs', 7 ]
让Django修改数据库,使其能够存储与模型Topic相关的信息
【python manage.py makemigrations learnings_logs】
Migrations for 'learning_logs':
learning_logs\migrations\0001_initial.py
- Create model Topic
Django创建了一个0001_initial.py的迁移文件,这个文件在数据库中为Topic创建一个表
应用这种迁移:【python manage.py migrate】
修改数据时:
1.修改models.py
2.对learning_logs调用makemigrations
3.让Django迁移项目
六、Django管理网站
创建超级用户
【python manage.py createsuperuser】
输入用户名、邮箱(可选)、密码
注:Django并不存储密码,而是存储从该密码派生出来的散列值。
每次输入密码时,都将计算其散列值,与存储的散列值进行比较。
在网站配置正确的情况下,几乎无法根据散列值推导出原始密码。
向管理网站注册模型
Django在model.py所在目录创建了admin.py的文件
1 from learning_logs.model import Topic #导入要注册的模型 2 3 admin.site.register(Topic) #让Django通过管理网站管理模型
添加主题
点击Topic的ADD可以添加主题
定义一个新模型,在models.py里
1 class Entry(models.Model):
2 """学到的有关某个主题的具体知识"""
3 topic = models.ForeignKey(Topic,on_delete=models.CASCADE)
4 text = models.TextField()
5 date_added = models.DateTimeField(auto_now_add=True)
6
7 class Meta:
8 verbose_name_plural='entries'
9
10 def __str__(self):
11 """返回模型的字符串显示"""
12 return self.text[0:50] + "...
admin.py里:
1 from learning_logs.models import Topic,Entry
2
3
4 admin.site.register(Topic)
5 admin.site.register(Entry)
Django shell
交互式终端会话环境
虚拟环境下:
python manage.py shell
>>> from learning_logs.models import Topic
>>> Topic.objects.all() 获取模型Topic的所有实例,返回查询集
遍历查询集
>>>topics = Topic.objects.all()
>>>for topic in topics:
... print(topic.id,topic)
...
3 Chess
4 Rock Climbing
>>> t = Topic.objects.get(id=3)
>>> t.text
'Chess'
>>> t.date_added
datetime.datetime(2018, 5, 22, 7, 49, 40, 722487, tzinfo=
>>> t.entry_set.all()
2018-05-22 21:38:07