1.安装django
pip install django
安装之后的目录
...\python36
- python.exe
- Scripts
- pip.exe
- django-admin.exe
- Lib
- 内置模块
- site-packages
- django
2. 创建项目
2.1 终端创建
- 打开终端
- 进入项目目录
如:D:\python\django\01\
- 执行命令创建
"%python path%\django-admin.exe" startproject 项目名称
django-admin startproject 项目名称 #配置了环境变量
2.2 Pycharm创建
2.3 默认项目结构
项目名称
- manage.py # 启动项目、创建app、数据管理
- 项目名称
- _init_.py
- settings.py # 项目配置
- urls.py # url和函数的对应关系
- asgi.py # 接收网络请求
- wsgi.py # 接收网络请求
3. APP应用
- 项目
- app1 # 用户管理【表结构、函数、模板、样式】
- app2 # 订单管理
- app3 # API接口
app创建
3.1 目录结构
└─── app01
│ ├───_init_.py
│ ├─── admin.py # 默认的admin功能
│ ├─── apps.py #
│ ├─── migrations # 数据库变更记录
│ ├─── models.py # 数据库操作
│ ├─── tests.py # 单元测试
│ ├─── views.py # 视图函数
4. 快速上手
- 注册app
settings.py
中添加apps.py
- 编写URL和视图函数对应关系
urls.py
- 编写视图函数
- 启动django项目
-
- 命令行启动
python manage.py runserver
-
- Pycharm启动
4.1 新增页面
重复以上过程
4.2 模板路径
- 优先去根目录寻找(需要先配置settings.py)
- 根据app的注册顺序,在每个app下面的templates目录中寻找
4.3 静态文件
开发一般将图片、CSS、js作为静态文件处理。
- 在app目录下创建static文件夹
- 页面引用
{% static %}
<img src="{% static 'img/1.jpg' %}">
5. 数据库操作
5.1 安装第三方模块
pip install mysqlclient
5.2 queryset.Filter
__exact 精确等于 like 'aaa'
__iexact 精确等于 忽略大小写 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以...开头
__istartswith 以...开头 忽略大小写
__endswith 以...结尾
__iendswith 以...结尾,忽略大小写
__range 在...范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
字典,如
condtions: {'date__lt': '2018-05-22','status': '未支付','name__exact': 'yangxia'}
Entry.objects.filter(**condtions)
Entry.objects.filter(date__lt= '2018-05-22',status='未支付',name__exact='yangxia')
翻译后的sql语句是
select * from Entry.objects where date<='2018-05-22' and status='未支付' and name like 'yangxia'
5.3 聚合查询-aggregate
aggregate()是QuerySet的一个终止子句,返回得是包含键值对得字典,其中值通过聚合函数计算,默认会生成一个键,同时也可以指定。
from django.db.models import Max,Avg,F,Q
# 默认键
models.Book.objects.all().aggregate(Avg("price"))
{'price__avg': 192.593333}
# 指定键
models.Book.objects.all().aggregate(avg_price=Avg("price"))
{'avg_price': 192.593333}
from django.db.models import Max,Avg,F,Q,Min,Count,Sum
# 聚合多个字段
models.Book.objects.all().aggregate(Avg("price"),Max("price"),Min("price"),Sum("price"))
{'price__avg': 192.593333, 'price__max': Decimal('233.33'), 'price__min': Decimal('111.12'), 'price__sum': Decimal('577.78')}
5.4 组合查询-annotate
annotate对数据分组然后再进行某些聚合操作,annotate返回包含聚合字段的结果集
models.Book.objects.all().annotate(authorNum=Count("author"))
book_list = models.Book.objects.all().annotate(authorNum=Count("author"))
for book in book_list:
print(book)
# book包含book字段和authorNum
5.5 F查询
F函数表示在查询中引用数据库字段
models.Book.objects.filter(id__gt=F("price"))
# 将book表中的id与price字段进行比较
models.Book.objects.filter(id__lt=F("price")/2)
# 将book表中的id与price字段除以2后进行比较
models.Book.objects.update(title=Concat(F("title"),Value("("),Value("第"),Value(")")))
# 连接字段
models.Book.objects.annotate(Sum(F("price")*F("id")))
5.6 Q查询
models.Book.objects.filter(Q(name="化学") | Q(name="务理"))
# 查询名称是化学或物理的书
models.Book.objects.filter(Q(name="化学") & ~Q(year=2023))
# 查询名称是化但不是2023年的书