再看Python基础知识

 1. type 和 object的关系

(1)type 是object的类;(2)type继承了object; (3)type是type自己的类。

所有的类(包括type),除了object都继承自object。【object是所有类的基类,包括type】

2. 一切皆对象

对象对应的就是地址。例如不同类型的变量可以赋值,实现的本质,就是变量指向的是一个内存地址。

3.可变类型与不可变类型

-- 可变类型:字典、列表、集合

--不可变类型:数字、字符串、元组

注意:

(1)字典的key必须用不可变类型,可以hash。

(2)Python中的参数传递:python中参数传递都是copy一份传递过去,由于一切皆对象,传递过去的都是地址。python中区分可变与不可变类型,可变类型在函数中修改会影响原来的,不可变类型,不会影响原来的。

 4.比较运算符(is 和 ==)

is比较的是id(id(值)),双等号比较的是值。

其id相同则值肯定相同,而值相同,其id则不一定相同。

 5.字符编码

bit:比特位,0或者1。

byte:8个bit位(比特位)是一个byte,就是一个字节。

1个字节:在电脑初期,1个字节,2的8次方变化,就可以表示出 欧美 国家所有的字符(数字、字母、标点符号),这就是ASCII编码的由来。随着 电脑的在世界范围的推广,这显然不够。

gbk编码:计算机到了中国,为了更好的兼容汉字,就推出了gbk编码。 

Unicode: 就像它的名字表示的,为世界伤所有的字符都分配了一个唯一的数字编号(戏称万国码)。这个编号范围从0x000000到0x10FFFFF(十六进制),有110多万,每个字符都有一个唯一的Unicode。换句话说,Unicode ,在世界范围,统一了字符和数字的对应关系。16进制,就是4个字节。

utf-8(全称Unicode Transformation Format,即unicode的转换格式),utf-8是不定长的。存储中,如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少字节。可以说,utf-8定义Unicode在硬盘上的具体存储方式。

那为何在内存中不直接使用utf-8呢?

utf-8是不定长的:一个英文字符占1Bytes,一个中文字符占3Bytes,生僻字用更多的Bytes存储
 
也就意味着如果用户输入的字符是:你y好,在内存中需要先经历计算的过程:“你”应该用3Bytes,“y”应该用1Bytes,“好”应该用3Bytes,
然后才能存储,所以内存中如果直接使用utf
-8格式去存储字符,耗费的总时间=计算时间+存储时间,而内存中使用定长的unicode格式存储字符,就省去了计算时间,
所以内存中使用unicode来存储字符会浪费空间,但是会提升速度,这是一种用空间换时间的方法

更多内容请参阅--https://www.cnblogs.com/liuqingzheng/articles/17386883.html

 6.闭包函数

闭包(closure)指的是在函数内部定义了另外一个函数,并返回了这个内部函数作为函数对象,同时还保存了外层函数的状态信息。这个内部函数可以依赖外层函数的变量和参数,而且外层函数返回的是这个内部函数的引用。这种在函数内部定义函数并返回的方式称为闭包。

(1)定义在函数内部;

(2)对外部作用域有引用(使用到了外部作用域的变量)。

【思想:在Python语言中,函数是一等公民,可以赋值给一个变量。】

装饰器是闭包函数的典型应用。

 7.wsgi协议

WSGI(Web Server Gateway Interface)是Python Web应用程序和Web服务器之间的接口标准,它定义了一个简单的API,使得Python Web应用程序可以被部署在多种Web服务器上,而无需修改应用程序代码。

WSGI库是实现WSGI接口的Python库,它提供了开发Web应用程序和Web框架的工具和组件,包括路由、请求/响应对象、中间件、模板引擎等。

Django是一个强大的Web应用框架,也是基于WSGI标准实现的。Django提供了完整的MVC架构、ORM、路由、请求/响应对象、模板引擎等组件,同时也支持插件和扩展。

8.视图的结果形式---响应对象HttpResponse

view 视图 中返回结果的四种形式 

  • HttpResponse()    ----响应多种数据类型
  • JsonResponse()  -----响应Json数据
  • render()               ----渲染响应HTML模板
  • redirect()             -----重定向

8.1 HttpResponse()

参数形式

HttpResponse(content, #响应体数据,返回给视图函数的内容
content_type=None,#响应体数据的类型, text/html文本 ---这个是默认、text/plain、css、js、xml、json
status=None,#http响应状态码 404 200---200是默认
charset=None,
*args,
**kwargs)

例如 archry 系统中的一段代码 【https://gitee.com/rtttte/Archery/blob/master/sql/resource_group.py

import simplejson as json
from django.http import HttpResponse

def
group(request): """获取资源组列表""" limit = int(request.POST.get("limit")) offset = int(request.POST.get("offset")) limit = offset + limit search = request.POST.get("search", "") # 过滤搜索条件 group_obj = ResourceGroup.objects.filter(group_name__icontains=search, is_deleted=0) group_count = group_obj.count() group_list = group_obj[offset:limit].values( "group_id", "group_name", "ding_webhook" ) # QuerySet 序列化 rows = [row for row in group_list] result = {"total": group_count, "rows": rows} # 返回查询结果 return HttpResponse( json.dumps(result, cls=ExtendJSONEncoder, bigint_as_string=True), content_type="application/json", )

8.2 JsonResponse()

将对象dumpjson字符串,然后将此json字符串封装成Response对象返回给浏览器。

场景:前端需要Json数据,此时,后端通过此方法构造JSON数据响应给 前端。

Django提供了JsonResponse构造并响应Json数据:

(1)将响应数据转换为Json字符串;(2)设置相应头Content-Type为application/json;(3)默认情况下JsonResponse只能对字典进行dump,如果想要对非字典的数据进行dump,那么需要给JsonResponse传递一个safe=False参数。

def test_jsonview(request):
    info_dict = {'name': 'tom', 'age': 18} ###字典形式
    # json_str = json.dumps(info_dict)
    # resp = HttpResponse(json_str, content_type='application/json')
    resp = JsonResponse(info_dict)
    return resp

8.3 render()

render方法就是将一个模板页面中的模板语法进行渲染,最终渲染成一个html页面作为响应体。
用途:结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。
格式与参数
render(request,  ###用于生成响应的请求对象。
 template_name ###要使用的模板的完整名称,可选的参数
[, context]) ###添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
实例,来源于Archery 【https://gitee.com/rtttte/Archery/blob/master/sql/sql_workflow.py
def alter_run_date(request):
    """
    审核人修改可执行时间
    :param request:
    :return:
    """
    workflow_id = int(request.POST.get("workflow_id", 0))
    run_date_start = request.POST.get("run_date_start")
    run_date_end = request.POST.get("run_date_end")
    if workflow_id == 0:
        context = {"errMsg": "workflow_id参数为空."}
        return render(request, "error.html", context)

    user = request.user
    if Audit.can_review(user, workflow_id, 2) is False:
        context = {"errMsg": "你无权操作当前工单!"}
        return render(request, "error.html", context)

    try:
        # 存进数据库里
        SqlWorkflow(
            id=workflow_id,
            run_date_start=run_date_start or None,
            run_date_end=run_date_end or None,
        ).save(update_fields=["run_date_start", "run_date_end"])
    except Exception as msg:
        context = {"errMsg": msg}
        return render(request, "error.html", context)

    return HttpResponseRedirect(reverse("sql:detail", args=(workflow_id,)))

8.4 redirect()

 跳转页面时使用,用来实现 【重定向】。

传递参数是要重定向的一个硬编码的URL或者 一个完整的URL。

【redirect 、前面例子中HttpResponseRedirect()、反向解析reverse() 以及啥是硬编码的URL,可以参照这个分享:https://www.jianshu.com/p/3d99ddd5148f

 9.HttpRequest 类

可以阅读《https://www.cnblogs.com/liuqingzheng/archive/9509801.html

10. sys.argv 用法 

首先看下 sys。 “sys” 是 “system”,是一个系统模块,该模块提供了一些接口,用户访问python解释器自身使用和维护的变量,同时模块中还提供了一些函数。

而argv就是模块里的一个函数。“argv” 即 “argument value” 是一个列表对象,其中存储的是在命令行调用 python 脚本是提供的 “命令行参数”,即它包含了命令行传递给Python脚本的参数。

sys.argv是一个列表
sys.argv[0]是被调用的脚本文件名或全路径

sys.argv[1]就是我们从程序外部输入的第一个参数。

sys.argv[1:] 依次打印出输入的元素参数。

 

posted @ 2024-01-07 22:46  东山絮柳仔  阅读(40)  评论(0编辑  收藏  举报