各种学习笔记

本文详细介绍了Python中的字符串标识、动态语言的鸭子类型概念、function与method的区别,以及变量前加*的意义。接着探讨了HTTP请求的流程,包括状态码和响应类型。此外,还讲解了静态与动态网页的差异。最后,以Flask框架为例,阐述了其基本使用和视图函数的命名规则,展示了如何构建简单的Web应用。
摘要由CSDN通过智能技术生成

Python

  • 由于python是动态语言,根据类创建的实例可以绑定任意属性
    给实例绑定属性的方法是通过实例变量,或者通过self变量

一、字符串前加URB/urb

  • U 转化为unicode编码
  • R 不执行转义操作,后面的字符串就是原始字符串
  • B 生成的是类型bytes的实例

二、动态语言的鸭子类型

  • 并不要求严格的继承体系。只要看起来像,走起来像,就是。
  • file-like object 就是一种鸭子类型
class Animal(object):
    def run(self):
        print('animal is running')

class Dog(Animal):
    def run(self):
        print('Dog is running')

class Cat(Animal):
    def run(self):
        print('Cat is running')

# 这里的x就像一个占位参数对象,只要传入的对象有run方法就可以了
def run_twice(x):
    x.run()
    x.run()

run_twice(Animal())
run_twice(Dog())
run_twice(Cat())

输出:

animal is running
animal is running
Dog is running
Dog is running
Cat is running
Cat is running

三、function和method

class Animal(object):
    def run(self):
        print('animal is running')
>>> type(Animal.run)
<class 'function'>
>>> type(Animal().run) 
<class 'method'>
  • 从概念上去分。函数可以看成一个数学上的概念,比如说完成加减乘除的函数。它其实有一个内在的约束:就是如果参数相同,对一个函数的每次调用返回的结果应该始终一样。
    而方法是要和对象联系起来的。而且它有一个隐含的参数:就是它所作用的对象。而这些更多地是在面向对象的语境里来说。
  • 类直接调用的是function,类的实例调用的是method
  • 永远记住,类只是一个模板,模板是不会亲自干活的。
    python中如果不加括号,除了个别的,那就是个标识符(你可以理解为变量)。加了括号代表运行前面的东西,比如f就是个标识符,f()代表运行f。
    Animal().run,如果Animal是个类,就代表先运行Animal这个类。类运行变为实例,实例才能亲自干活。
    Animal(). run就是这个实例里的run函数(run没加括号表示没运行run,仅仅是个函数而已),Animal(). run()就是先运行Animal生成一个实例,然后运行这个实例里的run函数。
  • 对象是类的实例,类是定义,对象是该类的数据
animal = Animal() # 先实例化出一个Animal对象
animal.run()      # 通过对象调用run方法

# 上面两行等同于
Animal().run()
>>> f = Animal().run()
animal is running
>>> g = Animal()
>>> g.run() 
animal is running
>>> k=Animal().run 
>>> k    #这里的k绑定了run方法
<bound method Animal.run of <__main__.Animal object at 0x000001A4F6B872B0>>
>>> k()  #加上括号运行run方法,可以得到输出
animal is running
>>> type(Animal().run())
animal is running
<class 'NoneType'>

四、变量前加*的意义

在变量前加*,则多余的参数会作为一个元组存在args中,如:

def func(*args):
	pass
func(1,2,3) #args表示(1,2,3)这个元组

如果使用**前缀,多余的参数会被认为是字典

def func(**args):
	pass
func(a='1',b='2',c='3')   #args表示{‘a’:'1','b':'2','c':'3'}

五、使用函数参数注解

def add(x:int, y:int) -> int:
    return x + y

Python解释器不会对这些注解添加任何的语义。它们不会被类型检查,运行时跟没有加注解之前的效果没有任何差距。帮助使用者清除该函数应该怎么用。

Web

1、HTTP请求的流程

  1. 浏览器首先向服务器发送HTTP请求,包括
    方法:GET只请求资源、POST附带用户数据
    路径:/full/url/path
    域名:由host头指定:Host:www.sina.com.cn
  2. 服务器向浏览器返回Http响应,包括
    响应代码:
    状态码类别原因
    1XXInformation接收的请求正在处理
    2XXSuccess请求正常处理完毕
    3XXRedirection需要进行附加操作以完成请求
    4XXClient Error服务器无法处理请求
    5XXServer Error服务器处理请求出错
    响应类型:
    由content-type指定,例如:Content-Type: text/html;charset=utf-8表示响应类型是HTML文本,并且编码是UTF-8,Content-Type: image/jpeg表示响应类型是JPEG格式的图片;
  3. 如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。
  • Web采用的HTTP协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在HTTP响应中把HTML发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个HTTP请求,因此,一个HTTP请求只处理一个资源。
  • \r\n\r\n分割header和body
  • 当存在Content-Encoding时,Body数据是被压缩的,最常见的压缩方式是gzip,所以,看到Content-Encoding: gzip时,需要将Body数据先解压缩,才能得到真正的数据。压缩的目的在于减少Body的大小,加快网络传输。

2、静态网页和动态网页

一个Web应用的本质就是:

  1. 浏览器发送一个HTTP请求;
  2. 服务器收到请求,生成一个HTML文档;
  3. 服务器把HTML文档作为HTTP响应的Body发送给浏览器;
  4. 浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。
  • 静态:先把html用文件保存好,用一个现成的HTTP服务器软件,接受用户请求,从文件中读取HTML,返回
  • 动态:自己实现上述步骤

WSGI :web server gateway intetface web服务器网关接口

  • 无论多么复杂的web应用程序,入口都是一个WSGI处理函数。HTTP请求的所有输入信息都可以通过environ获得,HTTP响应的输出都可以通过start_response()加上函数返回值作为Body

flask

flask入门参考
flask实现一个可登录的简单网页参考
flask框架默认设置的目录方式

  • template html文件
  • static 存放图片、css、js文件
  • 为什么materialdesign下载的模板所有文件(html,css,js)在同一个目录下才可以正常显示。而加入template和static文件夹中并且修改了引用路径还是不可以正常显示。只有在运行flask的时候才可以正常显示图片和样式?

一、介绍

  • 典型的web微框架,仅保留了核心的功能:请求响应处理和模板渲染。分别由Werkzeug(WSGI 工具库)完成和 Jinja(模板渲染库)完成。
  • 把包含变量和运算逻辑的HTML或其他格式的文本叫做模板,执行这些变量替换和逻辑计算工作的过程被称为渲染,这个工作由模板渲染引擎jinja2来完成。模板需要动态生成

二、修改视图函数名

  • 首先,视图函数的名称是自由定义的,和URL规则无关。和定义其他函数或变量一样,只需要让他表达出所要处理页面的含义即可。
  • 还有一个重要的作用:作为代表某个路由的端点(endpoint),同时用来生成URL。对于程序内的 URL,为了避免手写,Flask 提供了一个 url_for 函数来生成 URL,它接受的第一个参数就是端点值,默认为视图函数的名称。
from flask import url_for

@app.route('/')
def hello():
    return 'Hello'

@app.route('/user/<name>')
def user_page(name):
    return 'User: %s' % name

@app.route('/test')
def test_url_for():
    # 下面是一些调用示例(请在命令行窗口查看输出的 URL):
    print(url_for('hello'))  # 输出:/
    # 注意下面两个调用是如何生成包含 URL 变量的 URL 的
    print(url_for('user_page', name='greyli'))  # 输出:/user/greyli
    print(url_for('user_page', name='peter'))  # 输出:/user/peter
    print(url_for('test_url_for'))  # 输出:/test
    # 下面这个调用传入了多余的关键字参数,它们会被作为查询字符串附加到 URL 后面。
    print(url_for('test_url_for', num=2))  # 输出:/test?num=2
    return 'Test page'

GIt

把本地的仓库推送到远程的仓库。github上也要有同样的仓库。

// 初始化仓库
1、git init			//把当前文件夹变成git可以管理的仓库
2、git add . 		//把该文件夹下的所有文件添加到仓库
3、git commit -m "注释"  		//把项目提交到仓库
4、git remote add origin git@github.com:zxr/MyWeb.git  		//与github远程仓库建立联系
5、git push -u origin master         //把本地MyWeb的所有内容推送到远程仓库(也就是github上)
// 以后再提交代码
1、git add .
2、git commit -m "注释"
3、git push

MySQL

一、完全卸载sql

  1. 直接在控制面板卸载
  2. 删除注册表
  3. 删除环境变量
  4. 删除c盘里的MySQL文件夹。特别注意这里有三个文件夹都包含Mysql文件夹。如果不都删除就会出现文件被占用无法删除的情况。
    在这里插入图片描述

二、重新安装Mysql

参考链接

软件工程

1、 production和development环境

在这里插入图片描述

  • 开发环境:开发工程师开发时使用的环境
  • 生产环境:即线上环境,真实用户使用的环境。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值