网络编程
urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应。
校验返回值,进行接口测试:
编码:把一个Python对象编码转换成Json字符串 json.dumps()
解码:把Json格式字符串解码转换成Python对象 json.loads()
Post请求:
urllib库里面有个urlencode函数,可以把key-value这样的键值对转换成我们想要的格式。
requests模块
urllib模块是python自带的网页模块,但是并不好用,好用的是requests模块
requests.get(url,params=data): get请求,返回的可以是字典也可以是json串
requests.post(url,data):post请求,返回的可以是字典也可以是json串
requests.get/post(..cookies=):请求加cookie,注意cookie是字典,不是字符串
requests.get/post(..headers=):请求加header
requests.post(..files=):上传文件,注意excel和图片需要用‘rb’
request.get(url) .content:下载文件,二进制文件要用‘wb’
异常处理
程序一旦报错,就会中止运行,不够人性化,希望有问题的部分可以给出提示,没有问题的部分可以正常运行,可以用if做判断,但会导致代码不易读
try:检查哪些代码会产生异常,后面跟except来捕获异常,如果没有捕捉到异常,程序还是会报错
except 某类异常 as e:如果try中发生该类异常,则执行。一个try可以写多个except,用来捕捉多类异常。如果想捕捉全部异常,用except Exception as e
finally:不管try中是否发生异常,都会执行
Django部署
安装django模块:
打开cmd执行以下命令
pip install django==1.9
django-admin startproject my_django
打开pycharm,新建一个项目
把源代码覆盖到这个项目
安装mysql MySQL Server 5.7:
打开或新建mysql路径\my.ini,输入以下内容保存
[mysqld]
basedir=mysql路径
datadir=mysql路径\data
port=3308
mysql路径下打开cmd执行以下命令
mysqld --install MYSQL_NEW --defaults-file= mysql路径\my.ini
net start MYSQL_NEW
连接数据库,新建一个main数据库
并执行main.sql初始化数据库表
安装redis Redis-x64-3.2.100:
打开redis.windows.conf查找requirepass foobared,在下一行加requirepass 你的密码
Redis路径下打开cmd执行以下命令
redis-server redis.windows.conf
启动服务:
项目路径下打开cmd,执行以下命令
python manage.py runserver 0.0.0.0:8000
打开浏览器,输入地址
FAQ:
django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([WinError 10061] 由于目标计算机积极拒绝,无法连接
说明mysql服务没有启起来
django.db.utils.InternalError: (1366, "Incorrect string value: '\\xE7\\x94\\xA8\\xE6\\x88\\xB7...' for column 'name' at row 1")
sql不能在pycharm里执行,要放到navicat里执行
Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
说明sql模式是only_full_group_by,但是写的sql中group by前面的字段不全
解决办法两种:第一种sql不变,在my.ini加上
[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
第二种把sql里group by前面的字段补全,建议用第一种
内置函数
zip()函数:用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
还可以搭配for循环使用:
map()函数:Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
两个参数一个是函数名,另一个是列表或元组。
注意:map()函数不改变原有的 list,而是返回一个新的 list。
filter()函数:用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。