配置项目的url解析
1,在项目的目录下新建一个urls.py文件,在其文件内部写URL的解析规则 示例如下
~
from django.conf.urls import url
from .views import get_count
urlpatterns = [
url(r"^playercount$", get_count)
]
~
2, 在工程的urls.py里 加入我们在第一步创建的urls.py文件
~~~
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r’^admin/’, admin.site.urls),
#加入配置
url(r’^t3/’, include(‘teach03.urls’))
]
~~~
聚合函数
使用aggregate()函数返回聚合函数的值
Avg:平均值
Count:数量
Max:最大
Min:最小
Sum:求和
使用案例
~~~
from django.db.models import Sum
from django.http import HttpResponse
from django.shortcuts import render
from .models import Team, Player
def get_count(request):
# 拿全部的数据
players = Player.objects.all()
# 求火力输出总和
res = players.aggregate(Sum(‘count’))
#返回结果
return HttpResponse(res.get(‘count__sum’))
~~~
F对象
什么时候用
当你想查询一条数据的时候 遇到了自己的a字段和自己的b字段做比较的时候
怎么用
~
def get_player(req):
# 需求:年纪大于火力输出的数据
res = Player.objects.filter(age__gt=F('count'))
# 将查询出来的对象 全部转换成数组嵌套字段的格式
result = [model_to_dict(i) for i in res]
return HttpResponse(json.dumps(result))
~
Q对象
什么时候用
多条件组合查询的时候可以使用
怎么用
~~~
def get_player_by_q(req):
需求:查询年纪大于30 火力输出大于100
res = Player.objects.filter(Q(age__gt=30) | Q(count__gt=100))
return HttpResponse(res)
~~~
条件连接符
| 表示 或 条件 (对应mysql里面的or)
& 表示 与 条件 (对应mysql里面的and)
~ 表示 取反
自定义管理工具
什么时候用
当系统给我提供那个objects 不满足你全部需求的时候 你可以定义一个管理类 比如:我需要经常给中国队添加球员
怎么用
1 写一个继承自models.Manager的一个类 在这个类 写你自己的额外的需求
~~~
class PlayerManager(models.Manager):
def create_china_player(self):
player = Player()
player.name = "西罗" + str(random.randint(0,100))
player.age = random.randrange(100)
player.count = random.randrange(1000)
player.team_id = 1
player.save()
return player
~~~
2 在对应的model类里加入 步骤一里 写的那个累的实例对象
~~~
my_objects_one = PlayerManager()
~~~
一对一关系的数据的双向查找
实例model如下
~~~
from django.db import models
Create your models here.
class BankCard(models.Model):
num = models.IntegerField(
verbose_name=’卡号’
)
bank_name = models.CharField(
max_length=30,
verbose_name=’银行名字’
)
def str(self):
return self.num
class Person(models.Model):
name = models.CharField(
max_length=20,
verbose_name=’人名’
)
age = models.IntegerField()
bankcard = models.OneToOneField(
BankCard,
verbose_name=’银行卡’
)
def str(self):
return self.name
~~~
通过银行卡找人
拿到一个银行卡对象 比如:bank = models.BankCard.objects.all().first()
找人:通过与其关联的类名的小写,拿到相关的对象
my_person = bank.person
一对多关系
夸关系条件查询
~~~
需求:找工程师所用语言的描述 包括“人生苦短”
engineers = models.Engineer.objects.filter(
language__desc__contains="人生苦短"
)
注释:language是Engineer类里的属性 通过这个language属性加双下划线去访问language对应的属性
~~~
获取级联数据
需求是:找会python的工程师
解决方案:先找到对应的python语言数据
然后通过python语言 获取工程师 代码如下
~~~
# 先拿到python语言
my_python = models.Language.objects.get(id=2)
获取会python的工程师
res = my_python.engineer_set.all() 语法格式:通过与语言Language有关系的那个类(Engineer)的小写(engineer)__set.all()
~~~
多对多关系
模型如下
~~~
class Author(models.Model):
name = models.CharField(
max_length=20,
verbose_name=’人名’
)
def str(self):
return self.name
class Book(models.Model):
title = models.CharField(
max_length=30
)
authors = models.ManyToManyField(
Author,
verbose_name=”作者”
)
def str(self):
return self.title
~~~
通过书 拿作者
~~~
# 拿第一本书
book = models.Book.objects.get(pk=1)
# 通过书拿作者
authors = book.authors.all()
return HttpResponse(authors)
通过访问book对象的authors属性的all() 方法拿到全部的作者
~~~
通过作者找书
解决方案:通过作者.书名类小写_set.all()
~
def get_book_by_author(req):
# 拿作者
author = models.Author.objects.get(id=1)
# 通过作者.书名类小写_set.all()
books = author.book_set.all()
return HttpResponse(books)
~
拓展:
1 将model对象转字典 怎么做:使用model_to_dict()函数 示例如下
~~~
def get_player(req):
# 需求:年纪大于火力输出的数据
res = Player.objects.filter(age__gt=F(‘count’))
# 将查询出来的对象 全部转换成数组嵌套字段的格式
result = [model_to_dict(i) for i in res]
return HttpResponse(json.dumps(result))
解释说明:result = [model_to_dict(i) for i in res]
model_to_dict 将每一次循环的i(i 代表每一个对象) 转成字典结构 并将其放入数组
~~~
2 将python对应的数据结构 比如字典或者数组转成json
~
import json
json.dumps(你的数据)
~
3 screen
安装:sudo apt install screen
使用:
创建:screen -S 窗口名字
查看:screen -ls
进入:screen -r 窗口名字
退出:exit;
注意:当系统关机重启以后 所有窗口全部被干掉
4 统一的管理虚拟环境
1 安装: pip install virtualenvwrapper
2 在家目录下 新建一个存放虚拟环境的文件夹
3 编辑 vim ~/.bashrc
加入:export WORKON_HOME=/home/liuda/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
4 source ~/.bashrc 激活环境变量
5 新建一个虚拟环境
mkvirtualenv 虚拟环境名字
如果需要制定python版本 就加-p
比如:mkvirtualenv python1803 -p python3.6
6 退出
deactivate
7 虚拟环境的切换
workon 虚拟环境名字
8 删除虚拟环境
rmvirtualenv 虚拟环境名字
备注:我们创建的虚拟环境 在我们环境变量WORKON_HOME的那个目录里面