标签:查询 validate 适用于 att 获取 lock 字典 json 序号
浏览器请求头上能够看到server: ... Cpython3.*
CPython指的就是Python, Python在实现过程当中使用的是C语言开发的. 也可以叫做CPython而已.
Jython,指的是Java语言的python编译器的实现, 在JVM中跑的..
函数和方法的概念总是容易弄混淆
一般而言, 通过类创建的对象, 在执行过程当中, 传入self, 则叫做方法.
在执行过程当中不传入self, 则叫做函数.
一般而言, 通过类生成的实力对象调用的都是方法(静态方法是函数). 其他则是函数.
class Test():
def one(self):
print(‘123‘)
@property
def two(self):
print(‘123‘)
test = Test()
# test.one在执行过程当中, 传入self.则叫做方法.(虽然self在后边没有用到).
test.one()
# test.two, 虽然two是类的方法,但是也属于函数(静态方法.self可以省去)
test.two()
包就是pack, 具有__init__.py文件
模块就是.py文件
库, 可以理解为许许多多个pack包组成的一个整体架构.
这几个概念大--->小依次为:
库 ==> 包 ==> 模块 ==> 类 => 方法or函数
还有容易弄混淆的概念是 库, 框架.
框架和库都是一堆包组成的东西.
框架一定是库,但库不一定是框架.
可以从用途方面去理解.
框架: 我这里的东西, 绝对能帮你完整的完成项目.
库: 我这里有许多东西, 能帮助你解决一些项目中遇到的问题.
Python新版本,字符串格式化不仅可以使用%, 还可以使用format.
使用方法如下:
"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
‘hello world‘
"{0} {1}".format("hello", "world") # 设置指定位置
‘hello world‘
"{1} {0} {1}".format("hello", "world") # 设置指定位置
‘world hello world‘
而且相对于%而言, {}可以进行数字格式化. 方式你与%相类似.
locals()函数, 表示当前函数下的所有局部变量.
在使用locals()函数的时候, 可以将当前函数内所有变量都保存为字典形式
在通常的前后端调用时候, 一般使用context作为字典来传输数据.
a = 1
b = 2
context = {
‘a‘ = a,
‘b‘ = b,
}
return render(‘123.html‘,context)
如果需要传输所有的函数的时候, 则可以通过local函数来传输.
a = 1
b = 2
return render(‘123.html‘, locals())
相比较于重新组织上下文, locals()函数更加方便简洁.
但是相对而言, local的易读性并没又重新组织上下文来的好.
如果只有类属性的字符串形式的数据, 可以使用getattr方法来获得属性
class Person():
def __init__(self):
self.name = ‘小张‘
p = Person()
print(p.name)
print(getattr(p, "name"))
如果需要判断一个函数是否可以调用, 可以用callable()
print(callable(‘asdf‘))
def test():
pass
print(callable(test))
# =========输出结果
# >:False
# >:True
直接赋值:其实就是对象的引用(别名)。
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(deepcopy): copy 模块的 deepcopy 方法,拷贝父对象,及其子对象。
例如:当对象A为字典, 字典内包含另一个对象B.
当使用浅拷贝, 更改B.则 原本的B对象内容会随之而改变.
当使用深拷贝, 更改B,则 原本的B对象内容不会发生改变, 因为此子对象同样拷贝了一份.
列表套字典, 或者字典套列表.
更复杂的结构应想办法简化.
调用选择集后的pk属性和id属性区别:
在使用 查询结果的pk或者id属性的时候, 大多时候并没又区别.
pk primary key , 查询主键
id 查询id,
当主键为id 的时候, 则没有区别.
当主键不为id的时候, 则pk则查询主键.
print(user.pk)
print(user.id)
permissions = users.role.values(‘permission__url‘)
再查询 用户下的 所有角色 下面的所有权限的时候, 可以使用values..跨表查询方式(‘对应表格__所查属性‘)
不管是values还是valueslist, 都是 遍历 所得QuerySet. 形成字典或者列表方式.
django通过ORM获取数据可直接使用distinct去除列表或者字典的重复内容.
django orm取出对象后, add 方法在一次性添加多个属性的时候,添加* .
但是set的时候并不需要
在使用ORM查询数据库的时候,可以直接使用filter(字段__in=[列表])来取出对应值的对象.
例如:
book_some = Book.objects.filter(id__in=[1, 2, 3, 4, 5])
像是django中formmodel, 可以通过传入orm实例生成表单. 或者传入具体orm对象, 使用formmodels对比该对象与接受参数的区别,进行修改.
获取一个模型类的字符串名称以及所在app名称的方式, 使用
from app01.model import Book
print(Book)
print(Book._meta.model_name)
print(Book._meta.app_label)
# =========输出结果
# >:<class ‘app01.models.Book‘>
# >:book
# >:app01
在获取字段显示属性的时候, 如果该字段值对应选项, 直接获取的时候则显示相对应的序号.
如果想直接获得选项的值, 可以使用语法:
object.get_group_display()
object.get(group) # 1
object.get_group_display() # ‘一组‘
limit_choice_to的用法.
在使用 多对多的表结构 构建form 的时候使用, 在modelform中显示的时候限制其显示内容
相当于在formmodel中增加一个filter过滤
在任何应用中, 如果没有指明路径的时候. 查找模板文件的顺序依次为:
例如:
{{ book.date | date:‘Y-m-d‘ }}
不管是使用modelform还是另外生成的表单.
在前端使用的时候, 通过使用as_p, 可以把所有的表单段, 以p标签渲染.
响应的还有as_ul, as_table
不管是在html标签还是django的模板中, 表单属性都有一个novalidate.
用来阻止表单再上传之前的, 来自浏览器的验证.
通常情况下需要添加该属性, 自定义验证过程.避免出现验证混乱 .
url(‘^test/‘,view.test)
url(‘^test/‘,([
url(‘^test01‘,view.test01),
url(‘^test02‘,view.test02),
],None,None))
第一种方式属于最简单的一种方式, 第二种方式,属于路由分发.其中两个None,分别代表应用,以及命名空间
如果需要向前端传输非转义的字符串, 则可以通过mark_safe(字符串)
调用路径: django.utils.safestring.mark_safe
在使用django自带认证组件, 又自定义了用户模型类的时候,需要再setting 设置"AUTH_USER_MODEL"="应用名.用户模型类"
django中继承MiddlewareMixin编写的中间件类.
需要根据请求的各种状态编写对应的状态. 其中的五个方法分别是:
根据中间件所影响的过程, 书写中间件内容.
如果中间件类没有没有书写以上5种方法,或者方法名称错误.
则对应的方法不起作用.
不通的Django版本上, 可能要求不一样, 不过一般来说. 中间件需要接受response并且返回response
在django2.2之后, request函数无法动态赋值,
起码在编写rbac验证过程当中, 在中间件的 响应级别中, response赋值无效.
最后只能通过session传输数据.
当请求方式为get方式的时候, 没有request.body请求体
只有当请求方式为post的方式的时候, 才有request.body请求体.
请求体中放的是原生数据, 为byte格式.
且这个时候, 如果编码方式为urlencode的时候.django能够将post请求体中的内容翻译所需要的数据. 如果不为urlencode,如 json等格式的时候, 则request不能识别,之后通过body取出, decode解码, json.loads转为json格式.
Django原生request解析器里面并不支持对json数据的解析. 如果一定要解析的话, 需要使用json模块.
为了更方便的发送接收数据, 所以才需要使用restframework.
一切皆是资源. 对数据的增删改查使用请求方式区别.
在请求资源的时候, 请求资源和请求单条资源的时候, url是一样的. 不过在处理方法的时候, 采用不同的请求方式来判定
例如:
请求书籍资源 books
url: 请求方式 请求内容 视图 返回内容
books/ get 请求所有资源 books 返回请求的所有资源
books/ post 增加一条数据 books 返回所增加的单条数据内容
books/(/d+) get 请求单条数据 bookdetail 返回请求的单条数据
books/(/d+) put 更改单条数据 bookdetail 返回此单条数据所更改的内容
books/(/d+) delete 删除单条数据 bookdetail 返回空
认证, 权限, 频率, 三组件之间. 频率是如何工作的? 查看源码
网景公司netscape开发的javascript, 提出的同源策略.
在ie浏览器大火之前,大多数人用的是netscape的浏览器(netscape navigator), 商用.
在判断url路径的时候, 一般情况url‘index/‘和‘index‘并没有什么区别. 两者都能访问到视图.
但是从最优效率来讲.url后不添加/效率更高, 一方面是出于开发过程中更方便, 再者是路径输入的时候, 很少会在后面添加/
严格意义上来讲, 在正常访问‘index/‘的时候, 浏览器地址最后没添加/, 访问不到.
但是通常框架会设置重定向. django中settings参数为 APPEN_SLASH . 默认为True. 当设置False的时候, 地址不添加/则无法访问‘index/‘
在使用Slash的时候, 用户的浏览器会产生一次重定向. url为‘index/‘, 当用户请求‘index‘, 则会产生重定向到‘index/‘.
会影响用户体验. 则, 在书写url地址的时候应尽量避免末尾使用/
在服务器端, 或者通过301跳转.
或者直接通过nginx反向代理,则可以避免前端跳转.
在书写式样的时候, 通过添加!important 设权重为最高.
table 没有缩写,代表表格元素
select+option作为已有属性的单选, 如果属于多选情况下就不能使用这种方式
需要添加相对应的multiple属性.
console.log是最常用的调试语法.
console.log(arg) 在控制台显示该变量
console.log(typeof arg) 在控制台显示该变量类型
var data=JSON.parse(are) 解析该数据为json格式.
jsonp (JSON with Padding) 使用json实现跨域请求
因为浏览器的同源策略, 会拦截下脚本文件的内的外域请求. (1.拦截请求.)
当使用script标签发送请求的时候, 就可以得到响应. 但是需要有同名变量接受. (2.命名问题)
当与外域服务器端协商好后, 采用同一个变量名头之后. 可以 接受变量.以及相对应的数据.(3.常约定为callbacks)
在浏览器使用jquery封装好ajax的script请求的时候. 通常约定了callbacks传输变量名. 然后服务器端用传输过来的变量名放置内容.最后,浏览器再使用该变量名接受数据.
在通常使用的过程当中. 通过自定义一个单一的所发送的变量名, 往往不如使用jquery自动拼接的变量名更安全. 所以对于jsoncallback属性可以不设置.直接使用success来接受变量.
contentType, 指的是, 传输到服务器的内容是什么类型的.该选项决定传输过去的数据将以什么样的编码格式进行编码.
dataType, 指的是, 期望接受到的数据是什么类型的. 该选项决定接受到的数据将以什么样的形式进行解码.
例如: 当dataType为json的时候.
如果接受到数据, 且成功解析为json格式,则成功显示.
如果解析
服务器端设置设置同域策略头.
跨域请求的时候, 也可以通过服务器端的设置, 设置响应头, 以避免浏览器拦截.
django中设置响应头需要通过response响应体设置: response[‘Access-Control-Allow-Origin‘] = ‘所允许访问IP地址‘
通过设置之后, 响应头会添加该‘Access-Control-Allow-Origin‘字段并指向请求地址.
在django中的reqeust, 数据传输编码是URLencode方式编码的.
在传输页面文本的时候, 则不会采用编码,直接使用文本方式传输内容."text/html"
在django中, 如果网站传输方式为Get或者Post请求, 这个时候浏览器会对数据进行编码, 编码方式为"application/x-www-form-urlencoded", 也是默认的编码格式urlencode. 可以通过reqeust.get或者request.post取值.
netstat 查询端口号, -tlp 可以查询所有占用当前网络端口的进程id, 相应可以kill掉不需要进程
在已经存在的数据库数据表中修改结构--- 添加新字段 的时候, 通常要设置新增加字段的默认值. 否则则容易出现问题,可以在增加字段后再取消掉.
已有表添加关联表需要设置 null=True. 关联之后再取消.
在相对应角色的权限中,url路径的表示上, 例如修改和删除对应不同的id, 则需要通过正则表达式来表示内容.
例如:
/user/
/user/edit/(\d+)
/user/delete/(\d+)
/user/add
标签:查询 validate 适用于 att 获取 lock 字典 json 序号
原文地址:https://www.cnblogs.com/jrri/p/12590286.html