一,Django入门
1.1基本概念
1.2创建环境与spp项目
安装依赖包
pip install django -i https://mirrors.aliyun.com/pypi/simple
进入"终端"CMD命令,通过django-admin命令创建django项目
django-admin startproject helloDjango
通过django-admin命令创建app应用
django-admin startapp mainapp
在一个Django项目中,存在很多的app应用(模块),创建好的app需要注册到主工程中
(settings.py )
1.3django项目结构
项目结构如下:
helloDjango |--- helloDjango 主工程目录 |--- settings.py 设置文件,数据库连接,app注册,中间件及模板配置 |--- urls.py 总路由 |--- wsgi.py Django实现wsgi的脚本 |--- __init__.py |--- mainapp 应用模块(主) |--- __init__.py |--- admin.py 后台配置脚本 |--- models.py 数据模型类声明所在的脚本 |--- views.py 声明当前应用的视图处理函数或类 |--- urls.py 自己增加的当前应用模块的子路由 |--- test.py 当前应用模块的单元测试类 |--- apps.py 声明当前应用的基本信息 |--- manage.py WEB应用的启动脚本,项目工程的入口
1.4Django请求流程
1.到urls分发器(总)
2.urls分发器根据路由规则(正则)分发到views
3.views去调用Model,交互数据
4.views将数据渲染到模板中
5.模板呈现给用户
二,数据库连接与ORM模型
2.1数据库连接配置
默认是sqllite3数据库,在使用ORM模型之前,需要先生成迁移文件,再执行迁移命令,在数据库中生成这些模型对应的表
-
先生成迁移文件
python manage.py makemigrations
-
开始迁移(生成表,修改表,删除表)
python manage.py migrate
注意:一旦生成了迁移文件并且迁移成功之后,不要删除迁移文件.
2.2初步使用ORM模型
定义一个用户(客户)模型
from django.db import models class UserEntity(models.Model): # 默认情况下会自动创建id主键 name = models.CharField(max_length=20) age = models.IntegerField(default=0) phone = models.CharField(max_length=11) Class Meta: # 指定当前模型类映射成哪一张表 db_table = 'app_user'
模型创建完成后,先后执行生成迁移文件和迁移
2.3CURD
查询
UserEntity.objects.all() # 查询所有 UserEntity.objects.get(pk=id) # 根据主键值查询一个实体对象
增加
u = UserEntity() u.name = '宋六' u.age = 30 u.phton = '18645145620' # 保存模型对象 u.save()
删除
u = UserEntity.objects.get(pk=id) u.delete() # 删除
修改
u = UserEntity.object.get(pk=id) u.value = value u.save()
2.4字段类型
2.5约束
2.6FileField和ImageField
文件字段和图片字段都属性MEDIA多媒体类型的文件,需要在settings.py设置脚本文件中指定MEDIA_ROOT,MEDIA_URL,STATIC_URL,STATICFILES_DIRS
使用ImageField时,必须安装Pillow库
pip install Pillow
三,Admin的site站点配置
admin站点是django自带的,需要配置
执行命令创建超级用户,和密码
python .\manage.py createsuperuser
settings设置
# 修改语言为中文 LANGUAGE_CODE = 'zh-hans' # 修改时区为亚洲上海 TIME_ZONE = 'Asia/Shanghai'
模型注册到admin(mainapp文件下的admin.py)
# 导入模型 from mainapp.views import UserEntity # Register your models here. # 修改admin配置 class UserAdmin(admin.ModelAdmin): list_display = ('id', 'name', 'age', 'phone') # 模型显示字段 list_per_page = 2 # 每一页显示记录数 list_filter = ('id', 'name', 'age', 'phone') # 过滤器(一般配置分类字段) search_fields = ('id', 'name', 'age', 'phone') # 将模型注册到admin后台中 admin.site.register(UserEntity, UserAdmin)
访问ip:post/admin
四,综合案例-水果管理
3.1模型设计
Fruit 水果模型类 |--- name |--- price |--- source |--- cate_type_id FruitImage 水果图片模型类 |--- fruit_id |--- url |--- width |--- height |--- name CateType 水果分类 |--- name |--- order_num Store 水果商店 |--- name |--- boss_name |--- phone |--- address |--- city |--- lat |--- lon Storedetail 水果商店的详情
3.2模板的基本使用
循环语句块
{% for item in items %} {% endfor %}
分支循环
{% if 条件表达式 %} {% endif %}
变量
{{ 变量名 }}
在views.py视图函数中,渲染模板
return render(request,'fruit/list.html',locals())
###
3.3页面设计
{% block name %} {% endblock %}
{% extends "base.html" %}
四,模型的Meta元信息
在模型类中,声明内部类Meta,类成员可以有如下的变量:
-
db_table
-
ordering
-
verbose_name
-
verbose_name_plural
-
unique_together
-
abstract布尔类型,表示当前的模型类是否为抽象类,如果抽象类,则不会wbvf
五,渲染模板的render()方法有哪些参数,分别代表什么含义
-
request请求对象,是django.http.HttpRequest类的对象
-
模板的html文件,是字符串类型,文件位置相对于templates目录的
-
context上下文,是dict字典类型,可以使用locals()将本地的变量转成字典对象
六.CURD深度使用
6.1 了解模型中的objects是什么?
默认情况下,模型类中会创建一个Manage类的对象,赋给objects