django练习

配置项目的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的那个目录里面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值