文章目录
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请求的流程
- 浏览器首先向服务器发送HTTP请求,包括
方法:GET只请求资源、POST附带用户数据
路径:/full/url/path
域名:由host头指定:Host:www.sina.com.cn - 服务器向浏览器返回Http响应,包括
响应代码:
响应类型:状态码 类别 原因 1XX Information 接收的请求正在处理 2XX Success 请求正常处理完毕 3XX Redirection 需要进行附加操作以完成请求 4XX Client Error 服务器无法处理请求 5XX Server Error 服务器处理请求出错
由content-type指定,例如:Content-Type: text/html;charset=utf-8表示响应类型是HTML文本,并且编码是UTF-8,Content-Type: image/jpeg表示响应类型是JPEG格式的图片; - 如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出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应用的本质就是:
- 浏览器发送一个HTTP请求;
- 服务器收到请求,生成一个HTML文档;
- 服务器把HTML文档作为HTTP响应的Body发送给浏览器;
- 浏览器收到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
- 直接在控制面板卸载
- 删除注册表
- 删除环境变量
- 删除c盘里的MySQL文件夹。特别注意这里有三个文件夹都包含Mysql文件夹。如果不都删除就会出现文件被占用无法删除的情况。
二、重新安装Mysql
参考链接
软件工程
1、 production和development环境
- 开发环境:开发工程师开发时使用的环境
- 生产环境:即线上环境,真实用户使用的环境。