Dango model 几种继承形式
抽共享继承
不能等实例化,抽象方法必须在子类中实现,Django不对其建立对应的表。
class Animal(models.Model):
name = models.CharField(max_length=50)
age = models.PositiveIntegerField()

# 下面这句决定了Animal是一个抽象类/Model
class Meta:
abstract = True

class Human(Animal):
kind_hearted = models.BooleanField()
sex = models.CharField('sex', choices=(('m','male'), ('f', 'female')), max_length=1)
#...
正常继承
父类可以被实例化,Django也生成对应的表。
代理
Django 的代理类不会生成对应的表,与父类公用一张表,并且代理类不能增加属性,只能增加方法。
from django.db import models

# Create your models here.

class Person(models.Model):
name=models.CharField(max_length=8)

class ProxyPerson(Person):
class Meta:
proxy=True

def doSomething(self):
pass

# 定义了一个ProxyPerson类、proxy 和abstract 写法上并没有什么不一样;
# 只是把abstract=True 变成proxy=True就行了

自定义manage类
# new manager
class OrderManager(models.Manager):
def title_count(self, keyword):
return self.filter(title__icontains=keyword).count()

class Order(models.Models):
title = models.CharField(max_length=100)
# ...
#objects = models.Manager()
objects = OrderManager()
#此处相当重写了计数函数
def __unicode__(self):
return self.title

Django 级联删除
一个对象被对个对象当做外键引用,当删除指个对象后,默认把所有包含此对象外键的对象也删除,称作级联删除,为了避免级联删除,进行如下设置:
class Host(models.Model):
hostname = models.CharField(max_length=20,primary_key=True, blank=False)
static_ip = models.CharField(max_length=20,unique = True)

class CCRole(models.Model):
name = models.CharField(max_length = 20,primary_key = True)
host = models.ForeignKey(Host,null=True,blank=True,on_delete=models.SET_NULL)
# 增加了on_delete=models.SET_NULL这样就阻止了级联删除,但前提是null=True
Django日志
此处只使用一种作为示例
import logging
from django.db import models
from django.db.models.signals import pre_save
from django.dispatch import receiver

class Order(models.Model):
# ...
logger = logging.getLogger(__name__)

@receiver(pre_save, sender=Order)
def pre_save_handler(sender, **kwargs):

# 我们可以在Order这个Model保存之前输出想要的信息了
logger.debug("{},{}".format(sender, **kwargs))

Django session & cookies
相对于session,cookies是不安全的,所以Django只在cookies中存放session_id,将重要的信息加密存到服务器端。
session / cookies 操作
#给本地保存session
request.session['order_id'] = order_id
#删除session
del request.session['order_id']
#读取session
session.get['order_id',False]

python 三种类方法
实例方法、类方法、静态方法
class A(object):
def foo(self, x):
print('实例方法,使用的时候必须传递实例,即这块的self')

@classmethod
def class_foo(cls, x):
print ('类方法,使用的时候必须传递类对象,eg: A.class_foo(x)')

@staticmethod
def static_class(x):
print ('静态方法')

python 自省
type()#输出对象类型
dir()#输出对象的所有方法
hasattr()#判断是否有属性
isinstance(1,(int,float))#是否是某一类型

下划线
__foo__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突.

_foo:一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式.

*args and **kwargs
*args 作为函数参数意为参数为不确定数量的变量
**kwargs 作为函数的变量意为不确定的字典型变量

Python的单例模式
单例模式

python 闭包函数
-在Python中创建一个闭包可以归结为以下三点:

闭包函数必须有内嵌函数
内嵌函数需要引用该嵌套函数上一级namespace中的变量
闭包函数必须返回内嵌函数

闭包函数参考

函式编程与lambda
#coding:utf8
#函数是编程+lambda
#fileter是一个过滤器,输出100内的偶数
print filter(lambda x:x%2==0 ,range(1,101))
#map是对每一项依次调用函数
print map(lambda x:x*x , [1,2,3])
#reduce是对序列每一项进行迭代,改式子是计算100以内的和
print reduce(lambda x,y:x+y ,range(1,101))
#生成斐波那契数列
f = [1,1]
print [f.append(f[-1]+f[-2]) or f.pop(0) for i in range(100)]

copy deepcopy
简单总结:一般的直接赋值相当于把a开辟的内存地址传给另一个变量b,当在对a进行修改操作时候相当于在该内存中进行操作,所以b也随之变化。
copy是仿照a也开辟一块内存将a中的值进行复制,不过当a中有数组时,c复制的也是内存地址,所以当a中的数组变化时候c中的数组也会变化。
deepcopy是进行深层次的复制,将a里面的数组也进行了复制,不同于copy的复制内存地址,所以a怎么变都不会影响d。
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象

b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝

a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象

print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d

输出结果:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
is ==
is 比较地址
== 比较值

match search
match 只匹配头部
search 匹配所有

下划线问题
_ 私有属性
__ 只能通过类中获取,dict可以查看属性

封装
其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容

多态
不同子类对同一方法的重写有各自的特色。

Python2 Python3区别
print 由语句变为函数
2中分新式类(object)和就旧式类,新广度优先、旧深度优先。
3中/除 //整除
字典排序
dic = {'key2':2, 'key3':3, 'key4':1,}
print(sorted(dic.items(),key = lambda item : item[1]))
1
2
复制 浅拷贝 深拷贝
赋值
只拷贝引用
浅拷贝
没有拷贝子对象,所以子对象会随着原始对象改变,比如listl里面的list会随着之前的变化。
深拷贝
就是子对象也拷贝了的

django面试七的更多相关文章

  1. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...

  2. day 72 Django基础七之Ajax

    Django基础七之Ajax   本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 六 同源策略与 ...

  3. day 60 Django基础七之Ajax

      Django基础七之Ajax   本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 六 同源策 ...

  4. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)   Django基础七之 ...

  5. django 和 七牛云 交互

    django 和 七牛云 交互 七牛开发文档 安装 pip install qiniu 初始化 # access_key 个人中心的 ak # secret_key 个人中心的 sk from qin ...

  6. Django基础七之CBV装饰器和中间件

    Django基础七之CBV装饰器和中间件 目录 Django基础七之CBV装饰器和中间件 1. CBV加装饰器 2. Django中间件 2.1 Django中间件介绍 2.2 自定义中间件 2.2. ...

  7. Django面试集锦(1-50)

    目录 1.Django ORM查询中select_related和prefetch_related的区别? 2.only与defer的用法? 3.Django ORM是什么? 4.Django创建项目 ...

  8. django面试五

    http和https的区别https协议需要到ca申请证书,一般免费证书很少,需要交费. 注:CA - certificate authority,身份认证,权威机构认证,CA认证: http是超文本 ...

  9. Django基础七之Ajax

    一 Ajax简介 1.简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语言与服务器进行异 ...

随机推荐

  1. 浅谈cookie、session

    揭秘Cookie: cookie说的直白点就是保存在用户浏览器端的一个键值对,举个例子,你现在登录了京东商城,你把浏览器关闭之后,你再打开京东,你还是可以对你的账户继续操作,已经购买的商品,订单都是可 ...

  2. 2017-2018 ACM-ICPC, NEERC, Northern Subregional ContestG - Grand Test

    题意:找三条同起点同终点的不相交的路径 题解:用tarjan的思想,记录两个low表示最小和次小的dfs序,以及最小和次小的位置,如果次小的dfs序比dfn小,那么说明有两条返祖边,那么就是满足条件的 ...

  3. python-前20天的着重知识点

    1.CPU存在两种工作状态:一种是内核态,操作系统在运行--可以操作硬件: 另一种是用户态,是应用软件在运行--不可以操作硬件. 应用软件要控制硬件,就要从用户态切换成内核态 2.多道技术:(多道指的 ...

  4. Linux系统(X64)7 安装Oracle11g完整安装图文教程另附基本操作

    在linux 7.6 安装 oracle 11g    mount 挂载yum源 yum –y sys*  gcc*  lib* sys* ma* un* gli* elf* bin* com*   ...

  5. Qt中漂亮的几款QSS

    /* === Shared === */QStackedWidget, QLabel, QPushButton, QRadioButton, QCheckBox, QGroupBox, QStatus ...

  6. Python3组播通信编程实现教程(发送者+接收者)

    一.说明 1.1 标准组播解释 通信分为单播.多播(即组播).广播三种方式 单播指发送者发送之后,IP数据包被路由器发往目的IP指定的唯一一台设备的通信形式,比如你现在与web服务器通信就是单播形式 ...

  7. 百度AI认为最漂亮的中国女星是----范冰冰

    一.程序说明 1.1 程序说明 之前写调用百度AI接口的程序,然后刷到了两条明星的新闻,就想到了写个给明星颜值排下名的程序. 程序的关键点是两个,第一个是百度AI接口的调用这点其实直接使用早前实现的类 ...

  8. Oracle Linux下载教程(以Oracle Linux 6.9为例)

    一.说明 Oracle Linux是Oracle基于Redhat,针对Oracle系列软件(尤其是Oracle数据库)进行优化后的Linux发行版. 虽然Oracle Linux下载是免费的,但是并不 ...

  9. rsyslog+loganalyzer远程日志系统搭建教程(CentOS6.8)

    一.说明 本文主要是对“CentOS 6.7搭建Rsyslog日志服务器”进行整理,同时在本地进行环境搭建,验证在CentOS6.8上的正确性. 二.安装配置rsyslog 1.清空iptables关 ...

  10. js中有哪几种函数?

    匿名函数,回调函数,递归函数,构造函数