202002知识点

目录

  • Python

    • CPython
    • 概念
      • 函数和方法的概念
      • 包, 模块, 库概念
    • 方法
      • format()
      • locals()
      • getattr()
      • callable()
    • 直接赋值, copy, 与 deepcopy区别
    • python常用的数据结构
  • Django
    • ORM

      • pk和id
      • 关于values于values_list的运作机制.
      • ORM distinct去重.
      • ORM 对象添加和更新
      • ORM filter exclude
      • Python 实例方法再调用的时候,如果函数支持则可以通过传入instance来传入实例...
      • 模型类的名称以及所在app
      • 字段属性-值,获取
  • group_choice=[(1,‘一组‘),]
    • modelform
    • template

      • 查找顺序
      • 模板中限制date显示方式
      • 模板表单的as_p
      • 表单验证
    • url路由使用两种方法:
    • 向前端传输非转义字符串
    • 自带认证组件
    • 中间件:
    • request
      • 动态赋值?
      • 原生的request.
    • restframework
      • restful
      • restframework
      • restframework
  • Web
    • 浏览器历史
    • url路径的设定
    • css
      • 权重
      • 表格元素缩写
      • form表格的时候.
    • javascript中.
    • 跨域请求
    • 请求头中,Ajax中, 数据传输的类型书写:
    • 服务器端设置CORS()跨域资源共享(Cross-Origin Resource Sharing)
    • HTML数据传输过程中的数据类型
  • 其他
    • Linux 查询端口号
    • Data
      • 修改表结构
      • 添加关联表
    • rbac权限验证

Python

CPython

浏览器请求头上能够看到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函数

还有容易弄混淆的概念是 库, 框架.

框架和库都是一堆包组成的东西.

框架一定是库,但库不一定是框架.

可以从用途方面去理解.

框架: 我这里的东西, 绝对能帮你完整的完成项目.

库: 我这里有许多东西, 能帮助你解决一些项目中遇到的问题.

方法

format()

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()函数, 表示当前函数下的所有局部变量.

在使用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()

如果只有类属性的字符串形式的数据, 可以使用getattr方法来获得属性

	class Person():
	    def __init__(self):
	        self.name = ‘小张‘
	p = Person()
	print(p.name)
	print(getattr(p, "name"))

callable()

如果需要判断一个函数是否可以调用, 可以用callable()

		print(callable(‘asdf‘))

		def test():
		    pass

		print(callable(test))
		# =========输出结果
		# >:False
		# >:True

直接赋值, copy, 与 deepcopy区别

直接赋值:其实就是对象的引用(别名)。

浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

深拷贝(deepcopy): copy 模块的 deepcopy 方法,拷贝父对象,及其子对象。

例如:当对象A为字典, 字典内包含另一个对象B.

当使用浅拷贝, 更改B.则 原本的B对象内容会随之而改变.

当使用深拷贝, 更改B,则 原本的B对象内容不会发生改变, 因为此子对象同样拷贝了一份.

python常用的数据结构

列表套字典, 或者字典套列表.
更复杂的结构应想办法简化.

Django

ORM

pk和id

调用选择集后的pk属性和id属性区别:

在使用 查询结果的pk或者id属性的时候, 大多时候并没又区别.

pk primary key , 查询主键

id 查询id,

当主键为id 的时候, 则没有区别.

当主键不为id的时候, 则pk则查询主键.

print(user.pk)

print(user.id)

关于values于values_list的运作机制.

permissions = users.role.values(‘permission__url‘)

再查询 用户下的 所有角色 下面的所有权限的时候, 可以使用values..跨表查询方式(‘对应表格__所查属性‘)

不管是values还是valueslist, 都是 遍历 所得QuerySet. 形成字典或者列表方式.

ORM distinct去重.

django通过ORM获取数据可直接使用distinct去除列表或者字典的重复内容.

ORM 对象添加和更新

django orm取出对象后, add 方法在一次性添加多个属性的时候,添加* .

但是set的时候并不需要

ORM filter exclude

在使用ORM查询数据库的时候,可以直接使用filter(字段__in=[列表])来取出对应值的对象.

例如:

book_some = Book.objects.filter(id__in=[1, 2, 3, 4, 5])

Python 实例方法再调用的时候,如果函数支持则可以通过传入instance来传入实例...

像是django中formmodel, 可以通过传入orm实例生成表单. 或者传入具体orm对象, 使用formmodels对比该对象与接受参数的区别,进行修改.

模型类的名称以及所在app

获取一个模型类的字符串名称以及所在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()

group_choice=[(1,‘一组‘),]

object.get(group) # 1

object.get_group_display() # ‘一组‘

modelform

limit_choice_to的用法.

在使用 多对多的表结构 构建form 的时候使用, 在modelform中显示的时候限制其显示内容

相当于在formmodel中增加一个filter过滤


template

查找顺序

在任何应用中, 如果没有指明路径的时候. 查找模板文件的顺序依次为:

  1. 项目中的总‘template‘文件夹
  2. 根据应用的注册顺序, 依次查找app中的‘template‘文件夹
  3. 之后在去找.项目中隐藏的模板文件, 例如‘admin.html‘,‘404.html‘等.

模板中限制date显示方式

例如:

{{ book.date | date:‘Y-m-d‘ }}

模板表单的as_p

不管是使用modelform还是另外生成的表单.

在前端使用的时候, 通过使用as_p, 可以把所有的表单段, 以p标签渲染.

响应的还有as_ul, as_table

表单验证

不管是在html标签还是django的模板中, 表单属性都有一个novalidate.

用来阻止表单再上传之前的, 来自浏览器的验证.

通常情况下需要添加该属性, 自定义验证过程.避免出现验证混乱 .

url路由使用两种方法:

  1. 第一种
	url(‘^test/‘,view.test)
  1. 第二种
	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编写的中间件类.

需要根据请求的各种状态编写对应的状态. 其中的五个方法分别是:

  1. process_request : 请求进来时,权限认证 。
  2. process_view : 路由匹配之后,能够得到视图函数
  3. process_exception : 异常时执行
  4. process_template_responseprocess : 模板渲染时执行
  5. process_response : 请求有响应时执行

根据中间件所影响的过程, 书写中间件内容.

如果中间件类没有没有书写以上5种方法,或者方法名称错误.

则对应的方法不起作用.

不通的Django版本上, 可能要求不一样, 不过一般来说. 中间件需要接受response并且返回response

request

动态赋值?

在django2.2之后, request函数无法动态赋值,

起码在编写rbac验证过程当中, 在中间件的 响应级别中, response赋值无效.

最后只能通过session传输数据.

原生的request.

当请求方式为get方式的时候, 没有request.body请求体

只有当请求方式为post的方式的时候, 才有request.body请求体.

请求体中放的是原生数据, 为byte格式.

且这个时候, 如果编码方式为urlencode的时候.django能够将post请求体中的内容翻译所需要的数据. 如果不为urlencode,如 json等格式的时候, 则request不能识别,之后通过body取出, decode解码, json.loads转为json格式.

Django原生request解析器里面并不支持对json数据的解析. 如果一定要解析的话, 需要使用json模块.

为了更方便的发送接收数据, 所以才需要使用restframework.

restframework

restful

一切皆是资源. 对数据的增删改查使用请求方式区别.

在请求资源的时候, 请求资源和请求单条资源的时候, url是一样的. 不过在处理方法的时候, 采用不同的请求方式来判定

例如:

请求书籍资源 books

url: 请求方式 请求内容 视图 返回内容



books/ get 请求所有资源 books 返回请求的所有资源

books/ post 增加一条数据 books 返回所增加的单条数据内容



books/(/d+) get 请求单条数据 bookdetail 返回请求的单条数据

books/(/d+) put 更改单条数据 bookdetail 返回此单条数据所更改的内容

books/(/d+) delete 删除单条数据 bookdetail 返回空

restframework

  • APIView
  1. 使用APIView的时候, 构建新的request. 需要使用原有request的时候需要_request. 构建新的dispatch请求方式分发.
  2. 获取数据的时候,request.get或者request.data. data中包含了所有格式的数据, 根据情况序列化为需要的数据.
  3. restframework里面还封装的response, 是直接提交数据给前端. 替换django.http.response
  • Serializers
  1. Serializers, 主要适用于对于数据的序列化. 可以将QuerySet或者model对象转化为json字符串,或者将json字符串序列化为一条记录.(model操作需要对应modelSerializer)
  2. 对数据格式的请求或者读取的时候直接使用serializer即可直接获取数据类型, 免却for循环.
  3. 在使用serializer的时候可以进行二次封装. 直接封装成序列化类. 即可在使用的时候 直接调用.不需要重复设定
  4. 在使用serializer的时候可以使用,formserializer, 与之前的formmodel一一对应. 能更好的完成post或者put请求的数据修改和返回.
  5. 在使用serializer生成hiperLink的时候, 需要传入参数content=‘request‘:request.
  6. 在序列化单条记录(model)的时候, 返回单个字典 {} . 在序列化多条数据的时候(QuerySet),返回列表套字典格式数据. [{},{}]

restframework

认证, 权限, 频率, 三组件之间. 频率是如何工作的? 查看源码

Web

浏览器历史

网景公司netscape开发的javascript, 提出的同源策略.
在ie浏览器大火之前,大多数人用的是netscape的浏览器(netscape navigator), 商用.

url路径的设定

在判断url路径的时候, 一般情况url‘index/‘和‘index‘并没有什么区别. 两者都能访问到视图.

但是从最优效率来讲.url后不添加/效率更高, 一方面是出于开发过程中更方便, 再者是路径输入的时候, 很少会在后面添加/

严格意义上来讲, 在正常访问‘index/‘的时候, 浏览器地址最后没添加/, 访问不到.

但是通常框架会设置重定向. django中settings参数为 APPEN_SLASH . 默认为True. 当设置False的时候, 地址不添加/则无法访问‘index/‘

在使用Slash的时候, 用户的浏览器会产生一次重定向. url为‘index/‘, 当用户请求‘index‘, 则会产生重定向到‘index/‘.

会影响用户体验. 则, 在书写url地址的时候应尽量避免末尾使用/

在服务器端, 或者通过301跳转.

或者直接通过nginx反向代理,则可以避免前端跳转.


css


权重

在书写式样的时候, 通过添加!important 设权重为最高.

表格元素缩写

table 没有缩写,代表表格元素

  • 表头部分

    thead (table head) 字面意思, 表格头部, 表头部分. 其中放置整个表头部分

    th (table head) 缩写了大部分内容.与表格中的td相似, 但是进行了加粗处理. 一般放在table>tr>th.

  • 表格内容

    tr (table row) 表格行. 一行的内容.

    td (table data) 表格数据, 表格内单元格的数据内容.

    通常情况下

    一个table表格内, 一tr的th, 其余的tr全都是td

  • 在表格内部也可以通过使用th来代替td,用以着重加粗该单元格内容.
  • 其他标签缩写

    hr (horizontal rule) 水平分割线

form表格的时候.

select+option作为已有属性的单选, 如果属于多选情况下就不能使用这种方式
需要添加相对应的multiple属性.

javascript中.

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来接受变量.

请求头中,Ajax中, 数据传输的类型书写:

contentType, 指的是, 传输到服务器的内容是什么类型的.该选项决定传输过去的数据将以什么样的编码格式进行编码.

dataType, 指的是, 期望接受到的数据是什么类型的. 该选项决定接受到的数据将以什么样的形式进行解码.

例如: 当dataType为json的时候.

如果接受到数据, 且成功解析为json格式,则成功显示.

如果解析

服务器端设置CORS()跨域资源共享(Cross-Origin Resource Sharing)

服务器端设置设置同域策略头.
跨域请求的时候, 也可以通过服务器端的设置, 设置响应头, 以避免浏览器拦截.
django中设置响应头需要通过response响应体设置:	response[‘Access-Control-Allow-Origin‘] = ‘所允许访问IP地址‘
通过设置之后, 响应头会添加该‘Access-Control-Allow-Origin‘字段并指向请求地址.

HTML数据传输过程中的数据类型

在django中的reqeust, 数据传输编码是URLencode方式编码的.

在传输页面文本的时候, 则不会采用编码,直接使用文本方式传输内容."text/html"

在django中, 如果网站传输方式为Get或者Post请求, 这个时候浏览器会对数据进行编码, 编码方式为"application/x-www-form-urlencoded", 也是默认的编码格式urlencode. 可以通过reqeust.get或者request.post取值.

  • Python中处理json数据

    但是如果是通过Json数据格式传输的话, 则编码方式是(text/plain纯文本)方式.在python中获取到的字符串属于bytes类型, 无法直接通过reqeust方式取值.

    处理bytes类型数据需要先将数据由bytes类型,用decide解码为字符串类型, 一般编码格式为(‘utf8‘). 然后再使用json函数的loads方法读取这个json字符串,转化成python能够识别出来的字典形式.

  • 容易混淆的概念

    HTMLEncode编码格式, 是通过把网页页面中不容许出现的字符进行编码,通常是编码以下字符:"<"、">"、"&"、"""、"‘"等

    UrlEncode编码格式, 是将指定的字符串按URL编码规则,包括转义字符进行编码。

其他

Linux 查询端口号

netstat 查询端口号, -tlp 可以查询所有占用当前网络端口的进程id, 相应可以kill掉不需要进程

  • t 忽略长地址
  • l 正在监听的套接字
  • p 查看该进程pid和name

Data

修改表结构

在已经存在的数据库数据表中修改结构--- 添加新字段 的时候, 通常要设置新增加字段的默认值. 否则则容易出现问题,可以在增加字段后再取消掉.

添加关联表

已有表添加关联表需要设置 null=True. 关联之后再取消.

rbac权限验证

在相对应角色的权限中,url路径的表示上, 例如修改和删除对应不同的id, 则需要通过正则表达式来表示内容.

例如:

/user/

/user/edit/(\d+)

/user/delete/(\d+)

/user/add

原文地址:https://www.cnblogs.com/jrri/p/12590286.html

时间: 2024-10-27 12:42:18

202002知识点的相关文章

H5移动端知识点总结

移动开发基本知识点 一. 使用rem作为单位html { font-size: 100px; }@media(min-width: 320px) { html { font-size: 100px; } }@media(min-width: 360px) { html { font-size: 112.5px; } }@media(min-width: 400px) { html { font-size: 125px; } }@media(min-width: 640px) { html { f

Spring知识点回顾(01)

Spring知识点回顾(01) 一.依赖注入 1.声明Bean的注解 @Component @Service @Repository @Controller 2.注入Bean的注解 @Autowired @Inject @Resource 二.加载Bean 1.xml方式 - applicationcontext.xml : Beans, Bean, Component-Scan 2.注解方式 - @Configuration,@ComponentScan,@Bean 用@Configurati

Javascript易错知识点

? JS易错知识点总结: == 和 === 的区别: ==:判断两个变量的值是否相等. ===:判断两个变量的类型和值是否都相等,两个条件同时满足时,表达式为True. switch中break的作用: 如果一个case后面的语句,没有写break,那么程序会向下执行,而不会退出: 例如:当满足条件的case 2下面没有break时,case 3也会执行 1 var num = 2; 2 switch(num){ 3 case 1: 4 alert('case 1'); 5 break; 6 c

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时

JavaScript一些重要知识点结合题目的表现!

function Foo() { //① 声明一个Foo的函数 getName = function () { alert (1); }; return this; } Foo.getName = function () { alert (2);}; ② 为Foo创建一个叫getName的静态属性存储一个匿名函数 Foo.prototype.getName = function () { alert (3);}; ③为Foo的原型对象创建一个叫getName的匿名函数 var getName =

学完了js的知识,一起分享总结知识点

又一个知识点学完了,到了总结学习效果和知识总结的时间了.js这个编程语言相对于html和css的逻辑性要强一些,也比较不容易上手.概念性的知识点不难理解,就是实际的操作并不容易,需要通过学习和借鉴案列来理解和帮助并提高实践操作的能力,把理论知识更好的结合到实践当中去,这样才能更有利于去理解和提高自己,做到知识的真正转化,缺乏理论概念性的支撑,有时真的很难上手,尤其是对于刚学习新手而言.所以需要总结知识点,大家可以互相分享一下学习的方式方法,知识总结,通过这种方式方法,相信可以有效的帮助解决一些学

C#高级知识点概要(1) - 委托和事件

作者:linybo 要成为大牛,必然要有扎实的基本功,不然时间再长项目再多也很难有大的提升.本系列讲的C# 高级知识点,是非常值得去撑握的,不仅可以让你写代码时游刃有余,而且去研究和学习一些开源项目时,也不会显得那么吃力了. 希望大家记住,这里讲的所有的知识点,不仅仅是了解了就可以了,还要会灵活用,一定要多思考,撑握其中的编程思想. 本文讲的是委托和事件,这两个词可能你早就耳熟能详,但你是否真正撑握了呢? 本系列讲的C#高级知识点都是要求开发时能达到可以徒手写出来的水平(不依赖搜索引擎.找笔记等

关于Less,你必知的知识点

这是一篇关于Less学习教程 http://www.maiziedu.com/course/497/,讲解了Less的语法,Less的混合等知识点. 1. 关于 less sass 的预编译处理器 LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以借助Node.js或者Rhino在服务端运行. less 编译使用前期使用koala 编译 2. less的 语法 A): 注

JavaScript 总结几个提高性能知识点

前段时间花时间看了大半的<High Performance JavaScript>这本书啊,然后就开始忙项目了,庆幸最忙的一周已经熬过去了.由于空不出时间,这个月写的学习笔记也不多,忙完最苦X的一周,这两天晚上也算是挑灯夜读了...终于是在残血之际将这本书shut down了... 既然读完了,总归是要学到些什么的.说说对这本书的看法先吧,整体的来说,内容还是不错的,就是感觉有点老了(作为前端小白,也可能是自身水平有限,未能体会到其中真意).看这本书的过程中也是写了挺多代码用以测试的,并且对本