安装django
pip install django
# pip install django==3.1.6
创建django项目
在一个项目中可以包含多个应用程序。
django-admin startapp app_name #创建一个应用程序
django-admin startproject project_name #创建一个项目
运行django项目
python manage.py runserver 8000
MTV模式
Models:数据库管理员(非必须)
Templates:模板引擎(非必须)
Views:接口引擎
浏览器输入地址——> urls.py ——> view ——> model ——> 数据库 ——> views ——> templates ——> response(字节码bytes)——> 浏览器
请求与响应
request ——> urls(path)
response ——> views(HttpResponse, TemplateResponse, JsonResponse )
路由分层
就是 urls.py 之间规则
…
数据库迁移命令
python manage.py makemigrations
python manage.py migrate
这两个命令是 Django 中用于数据库迁移的命令。
python manage.py makemigrations 命令用于生成数据库迁移文件。迁移文件是 Django 中的一种特殊文件,它记录了对模型的更改,例如创建新表、添加字段、修改字段等。通过运行该命令,Django会检测您对模型的更改,并生成相应的迁移文件,以便在数据库中应用这些更改。
python manage.py migrate 命令用于将数据库迁移应用到实际的数据库中。在运行该命令时,Django会查找尚未应用的迁移文件,并将其应用到数据库中,以确保数据库结构与模型定义保持同步。
通常情况下,当您对模型进行更改后,需要运行 makemigrations 命令生成迁移文件,然后再运行 migrate 命令将这些更改应用到数据库中。这样可以保持数据库的一致性,并确保模型的更改在数据库中得到正确地反映。
需要注意的是,执行迁移操作前,请确保您已正确配置了数据库连接信息,并且数据库已正确创建。此外,如果您的模型有关联关系(如外键、多对多关系等),Django 还会自动生成相应的迁移文件来处理这些关联关系。
模板语言进阶
Django 的模板语言是一种简单而强大的模板系统,用于在 Django 的视图中生成动态的 HTML、XML、JSON 等内容。以下是 Django 模板语言的主要特点和语法:
- 插值:使用双大括号({{}})将变量插入到模板中,例如 {{ variable }}。
- 过滤器:可以使用过滤器对变量进行处理和转换,例如 {{ variable|filter }}。过滤器可以通过管道(|)进行串联。
- 标签:使用单大括号和百分号({% %})包围的内容,用于执行控制逻辑、循环、条件判断等操作。例如 {% if condition %} … {% endif %}。
- 注释:使用 {# #} 包围的内容,用于添加注释,这些注释在渲染模板时会被忽略。
- 循环:使用 {% for item in list %} … {% endfor %} 进行循环迭代,可以遍历列表、字典等可迭代对象。
- 条件判断:使用 {% if condition %} … {% elif condition %} … {% else %} … {% endif %} 进行条件判断。
- 继承和块:可以使用 {% extends ‘base.html’ %} 定义模板继承关系,并使用 {% block content %} … {% endblock %} 在父模板中定义可替换的块。
- URL 反向解析:使用 {% url ‘view-name’ arg1 arg2 %} 可以根据视图名称和参数生成相应的 URL。
- 静态文件:使用 {% static ‘path/to/file’ %} 可以生成静态文件的 URL。
Django 模板语言提供了丰富的功能和语法,可以使模板与视图逻辑相分离,提高代码的可维护性和重用性。它允许在模板中动态地插入变量、执行控制逻辑和循环,使开发人员能够轻松地生成动态的内容和交互式的用户界面。
Model 之 Instance 与 QuerySet
-
数据库
仓库 -
Model
仓库设计图
Field:CharField、IntegerField、FloatFiled、DateTimeField、ForeignKey、OneToOneField、ManyToManyField…
Field参数:max_length、choices、default、null、blank… -
Instance
货物
常用方法:save()、get()、delete()… -
QuerySet(查询集)
包裹(可以有0-N个Instance)
类似列表的对象(可索引,切片,in(instance in queryset))
常用方法:filter()、get()、all()、delete()、update()、create()、bulk_create()、order_by()… -
举个例子:
Model的定义:class Person(models.Model): GENDER_CHOICES = ( (1, '男'), (0, '女') ) name = models.CharField(max_length=255) age = models.PositiveIntegerField() gender = models.BooleanField(choices=GENDER_CHOICES) # item.gender 显示的是 True 或者 False, item.get_gender_display 显示的是 男 或者 女 id_card = models.CharField(max_length=18) address = models.CharField(max_length=255) temperature = models.FloatField() ''' class Meta可以用于指定一些与模型类相关的配置选项,例如数据库表名、排序方式、权限等。 ''' class Meta: permissions = ()
QuerySet 和 Instance 的操作(可以通过 python manage.py shell 方便的测试)
from second_app.models import Person p = Person(name="张三", age=20, gender=1, id_card="123123123123333333", address='成都市成华区', temperature=38.5) # 得到的是一个 instance p.save() ps = Person.objects.fileter() # 返回的一个 QuerySet ps.count() p = Person.objects.get(id=1) # 返回的是一个 instance p.age = 30 p.refresh_from_db() p.age = 30 p.save() p.refresh_from_db() ps = Person.objects.filter(id=1) # 返回的一个 QuerySet ps.update(age=22) ps[0] ps[0].age ps.delete() ps = Person.objects.filter()
Django命令行
python manage.py shell
python manage.py shell 是 Django 提供的专用命令行工具,用于与 Django 项目进行交互,可以方便地访问项目资源、进行数据库操作和快速开发调试。而默认的 Python Shell 只是 Python 解释器的交互式环境,没有加载 Django 项目的配置和上下文,无法直接访问项目中的资源和数据库。
-
Django 环境加载:python manage.py shell 在启动时会加载 Django 项目的配置和应用,确保在交互式环境中可以直接访问项目中定义的模型、视图、管理器等。
-
方便的数据库访问:python manage.py shell 会自动为你配置好数据库连接,可以直接通过模型类进行数据库操作,而不需要手动设置数据库连接。
-
项目上下文加载:python manage.py shell 会加载项目的上下文,包括项目的设置、应用配置等信息,使得在交互式环境中可以方便地访问和操作项目相关的资源。
-
快速开发和调试:python manage.py shell 方便开发人员进行快速的代码测试、调试和验证,可以直接执行和测试 Django 项目中的代码逻辑。
Model 与 Form 与 ModelForm
Model:Model是面向数据库的
Form:Form是面向前端的
ModelForm:与Model有关,与前端也有关
前后端不分离之五大视图
动作 | 视图名 | 是否需要Model | 是否需要Form |
---|---|---|---|
增 | CreateView | 是 | 是 |
删 | DeleteView | 是 | 否 |
改 | UpdateView | 是 | 是 |
查 | ListView, DetailView | 是 | 否 |
ListView
…
CreateView
…
DetailView
…
UpdateView
…
DeleteView
…
前后端分离之常用视图
View
…
APIView
…