django第三天

动态路由,实现统一删除功能

urls

url(r'^host_del/(host|user|group)/(\d+)$',views.host_del,name='del'),

template

<a href="{% url 'app01:del' 'host' obj.id %}" class="btn btn-sm btn-danger">删除</a>

views

from app01.models import *
import sys
def host_del(request,*args):
table = getattr(sys.modules[__name__],args[0].capitalize())
host = table.objects.filter(id=args[1])
host.first().user.clear()
host.delete()
return redirect(to='/host_list/')

外键的增改查

class Book(models.Model):
title = models.CharField(max_length=32)
publisher = models.ForeignKey('Publisher',related_name='books') book_obj.publisher ——》 关联的对象 book_obj.publisher_id
book_obj.publisher.id
book_obj.publisher.name 不指定related_name
pub_obj.book_set ——》管理对象
pub_obj.book_set.all() 指定related_name='books'
pub_obj.books ——》管理对象
pub_obj.books.all() Book.objects.filter(publisher__name='') 不指定related_name
Publisher.objects.filter(book__title='')
指定related_name='books'
Publisher.objects.filter(books__title='') 指定related_name='books',related_query_name='xxx'
publisher = models.ForeignKey('Publisher',related_name='books',related_query_name='xxx') Publisher.objects.filter(xxx__title='')

多对多的操作

正向查询

author字段里有books字段:
books = models.ManyToManyField(to='Book') # Django自动生成第三张表 author_obj = models.Author.objects.filter(id__lt=3).first() author_obj.books ——》 管理对象 author_obj.books.all() ——》 所有关联的对象
author_obj.books.set([1,2]) ——》 设置多对多关系
author_obj.books.set([对象1,对象2]) ——》 设置多对多关系 author_obj.books.remove(对象1 或者 id ) ——》 删除某一个多对多关系
author_obj.books.clear() ——》 删除所有多对多关系
author_obj.books.add(对象1 或者 id ) ——》 删除某一个多对多关系 author_obj.books.create() ——》 创建一个新的书籍对象 并且和当前的作者对象做关联

反向查询

跟外键一样。

聚合和分组

聚合

from django.db.models import Sum,Max,Min,Avg,Count

models.Book.objects.aggregate(Sum('price'),Count('price'),max=Max('price'))

分组
models.Book.objects.annotate(Count('author')).values() ——》 对象列表 把聚合结果放到对象中 models.Book.objects.values('publisher__name').annotate(min=Min('price')).values('publisher__name', 'min') ——》最后的values的内容只能是前面提到的

F和Q

from django.db.models import F	

F 动态取某个字段的值
ret = models.Book.objects.filter(kucun__lt=F('sale')).values()
models.Book.objects.update(sale=F('sale')*2)
Q 条件
Q(条件) Q(条件) | Q(条件) 或的关系 or
Q(条件) & Q(条件) 与的关系 and
~Q(条件) 非的关系 not

事务

import os

if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "BMS.settings")
import django
django.setup() import datetime
from app01 import models try:
from django.db import transaction
with transaction.atomic():
new_publisher = models.Publisher.objects.create(name="火星出版社")
models.Book.objects.create(title="橘子物语", publish_date=datetime.date.today(), publisher_id=10) # 指定一个不存在的出版社id
except Exception as e:
print(str(e))

模板之自定义filter、simple_tag、inclusion_tag

  1. 自定义filter

     	1. 在app下创建一个名为templatetags的python包
    2. 在templatetags下创建python文件 名字可随意 my_tags
    3. 导入并实例化
    from django import template
    register = template.Library() # register名字不能改 4. 定义函数
    @register.filter(name='dsb')
    def add_dsb(value,arg): # value 变量 arg 冒号后面的参数
    ret = "{}_{}".format(value,arg)
    return ret 5. 使用:
    在模板中使用
    {% load my_tags %}
    {{ "alex"|dsb:'very_dsb' }} 指定name 用name 没有指定name 用函数名
  2. 自定义simple_tag

     	同自定义filter的1、2、3
    4.定义函数 @register.simple_tag()
    def string_join(*args,**kwargs):
    ret = '_'.join(args) + '*'.join(kwargs.values())
    return ret
    5. 使用
    在模板中使用
    {% load my_tags %}
    {% string_join 'suibian' 'zhensuibian' k1='taisuibian' k2='jiushisuibian' %}
  3. 自定义inclusion_tag

     	同自定义filter的1、2、3
    4.定义函数
    @register.inclusion_tag('pagination.html')
    def pagination(total,page):
    return {'total':range(1,total+1),'page':page} 5. 有模板文件
    在模板中根据传过来的参数做渲染 ——》 完整的HTML代码段 6. 使用
    在模板中使用
    {% load my_tags %}
    {% pagination 10 5%}

cookie

Cookie的由来

大家都知道HTTP协议是无状态的。

无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直
接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况。 一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的。 状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被
保留。会话中产生的数据又是我们需要保存的,也就是说要“保持状态”。因此Cookie就是在这样
一个场景下诞生。

什么是Cookie

Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访
问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。

Cookie的原理

cookie的工作原理是:由服务器产生内容,浏览器收到响应后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。

Django中操作Cookie

获取Cookie

request.COOKIES['key']

设置Cookie

rep = HttpResponse(...)
rep = render(request, ...) rep.set_cookie(key,value,...)

参数

    1. key, 键
    1. value='', 值
    1. max_age=None, 超时时间
    1. expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
    1. path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
    1. domain=None, Cookie生效的域名
    1. secure=False, https传输
    1. httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

删除Cookie

def logout(request):
rep = redirect("/login/")
rep.delete_cookie("user") # 删除用户浏览器上之前设置的user的cookie值
return rep

session

http不知道每次请求是谁访问,因为这样快,简单快速,

   session写操作
request.session["user"]=user
'''
1、生成随机字符串
2、写cookie {"sessionID":"234asd243dv35fd"}
3、django-session表:
session-key session-data
234asd243dv35fd {"user":"alex"}
''' session读操作
user=request.session.get("user") '''
1 {"sessionID":"234asd243dv35fd"} # 先把这个值取出来
2 django-session表:
session-key session-data
234asd243dv35fd {"user":"alex"}
3 {"user":"alex"}.get("user")
''' request.session到底是什么? 注销:
request.session.flush() 删除表中的记录

day20_雷神_django第三天的更多相关文章

  1. day21_雷神_django第四天

    django第四天 1.form组件 解决两个事情: 不想重复提交,数据重置: 校验规则 流程: (1) 创建form组件对应的类,比如LoginForm (2) views.login: if ge ...

  2. day19_雷神_django第二天

    django_day02 Django的路由系统 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 1.URLconf配置 基本 ...

  3. day24_雷神_django项目部署

    # django项目部署 ... curl -I www.baidu.com 得到响应头信息 vim 里shift + % 找括号的另一半 find / -name virtualenv 3.创建虚拟 ...

  4. day18_雷神_django第一天

    # django_day01 1.http 协议 超文本传输协议,HTTP有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信. 协议概述 HTTP是一个客户端终端(用户)和服务器端( ...

  5. 从0开始学习react(三)

    这次我们来讲解第三节知识,考虑了下,先不去讲什么理论了,毕竟网上一搜一大堆,而且理论真心看不太懂啊!!! 今天我们就直接上实例喽! 大家HIGH起来!!!(想了好久,还是没舍得删这句话) 1.根据下图 ...

  6. 【雷神源码解析】无基础看懂AAC码流解析,看不懂你打我

    一 前言 最近在尝试学习一些视频相关的知识,随便一搜才知道原来国内有雷神这么一个真正神级的人物存在,尤其是在这里(传送门)看到他的感言更是对他膜拜不已,雷神这种无私奉献的精神应当被我辈发扬光大.那写这 ...

  7. HTML5物理游戏开发 - 越野山地自行车(三)粉碎自行车

    自上一章公布到如今已时隔四月,实在对不住大家.让大家久等了~话说不是我不关注我的博客,而是事情一多起来写博客的时间就少了. 待到今日有空了,回头看了看自己曾经写的文章,猛得发现已经四个月不曾写文章了. ...

  8. 问题 A: 雷神领域

    传送门 题目描述 L君,S大陆首屈一指的天才魔法师,创造了一个新魔法:雷神领域.  这个魔法会首先在地面上形成正方网格魔法阵列,然后在某些位置召唤雷电轴标.注意:一个位置只能有一个雷电轴标存在. 雷电 ...

  9. Bert系列(三)——源码解读之Pre-train

    https://www.jianshu.com/p/22e462f01d8c pre-train是迁移学习的基础,虽然Google已经发布了各种预训练好的模型,而且因为资源消耗巨大,自己再预训练也不现 ...

随机推荐

  1. 小强学渲染之Unity Shader编程HelloWorld

    第一个简单的顶点vert/片元frag着色器   1)打开Unity 5.6编辑器,新建一个场景后ctrl+s保存命名为Scene_5.默认创建的场景是包含了一摄像机,一平行光,且场景背景是一天空盒而 ...

  2. unity插件各领域王者

    移动端手势操作 Easy Touch 获取 缓动 iTween 获取 可视化编程 Playmaker1.9.0 获取 UI NGUI,UGUI 获取 Shader着色器可视化编程 AmplifySha ...

  3. Retrofit 2.0 上传文件

    1.用MultipartBody.Part的方式上传文件(单文件上传)(表单方式) @Multipart @POST("xxx/xxx") Call<ResponseBody ...

  4. ios OC 关键字 copy,strong,weak,assign的区别

    一.先介绍 copy.strong.weak 的区别,如代码所示 @property(copy,nonatomic)NSMutableString*aCopyMStr; @property(stron ...

  5. 移动端h5调试方法

    charles代理 使用技巧如下: http://www.jianshu.com/p/fdd7c681929c 1.手机wifi连接代理 以iphone为例,长按住wifi, 进入下一页,可看到 HT ...

  6. NumPy学习_02 ndarray基本操作

    1.算术运算符 它们只用于位置相同的元素之间,即为元素级的运算. 所得到的运算结果组成一个新的数组. 不用编写循环即可对数据执行批量运算.(矢量化) import numpy as np # 创建一个 ...

  7. yarn查询/cluster/nodes均返回localhost

    背景: 1.已禁用ipv6. 2.所有节点的/etc/hosts正确配置,任务在ResourceManager提交. 3.yarn-site.xml中指定了 yarn.resourcemanager. ...

  8. graph_base_pic_segmentation里面的细节和代码

    https://github.com/zhangbo2008/graph_base_pic_segmentation_analyzing/blob/master/README.md

  9. 解决初次安装PyCharm后 No Python interpreter selected的问题

    原文链接:https://liuzhichao.com/p/1543.html PyCharm 是由JetBrains打造的一款 Python IDE.具有智能代码编辑器,能理解 Python 的特性 ...

  10. [原创]networkx 画中文节点

    一直想分享一些自己遇到的坑,但确实很多时候走的太快 很多想做的事情会被快节奏的生活冲淡, 在公司做事反而比学校还自在, 因为是悠闲的实习期... 几点小建议写在前头--xdj: 遇到问题,大多数人首先 ...