网络编程

 

urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应。

 python基础-requests模块、异常处理、Django部署、内置函数、网络编程

校验返回值,进行接口测试:

编码:把一个Python对象编码转换成Json字符串   json.dumps()

解码:把Json格式字符串解码转换成Python对象   json.loads()

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

 

 

Post请求:

urllib库里面有个urlencode函数,可以把key-value这样的键值对转换成我们想要的格式。

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

 

 

requests模块

urllib模块是python自带的网页模块,但是并不好用,好用的是requests模块

requests.get(url,params=data) get请求,返回的可以是字典也可以是json串

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

requests.post(url,data)post请求,返回的可以是字典也可以是json串

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

requests.get/post(..cookies=)请求加cookie,注意cookie是字典,不是字符串

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

requests.get/post(..headers=)请求加header

 python基础-requests模块、异常处理、Django部署、内置函数、网络编程

requests.post(..files=)上传文件,注意excel和图片需要用‘rb’

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

request.get(url) .content下载文件,二进制文件要用‘wb’

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

 

 

异常处理

程序一旦报错,就会中止运行,不够人性化,希望有问题的部分可以给出提示,没有问题的部分可以正常运行,可以用if做判断,但会导致代码不易读

try:检查哪些代码会产生异常,后面跟except来捕获异常,如果没有捕捉到异常,程序还是会报错

except 某类异常 as e:如果try中发生该类异常,则执行。一个try可以写多个except,用来捕捉多类异常。如果想捕捉全部异常,用except Exception as e

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

 

finally:不管try中是否发生异常,都会执行

 python基础-requests模块、异常处理、Django部署、内置函数、网络编程

 

 

Django部署

安装django模块:

打开cmd执行以下命令

pip install django==1.9

django-admin startproject my_django

打开pycharm,新建一个项目

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

把源代码覆盖到这个项目

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

安装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

打开浏览器,输入地址

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

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()函数:用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

还可以搭配for循环使用:

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

map()函数:Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

两个参数一个是函数名,另一个是列表或元组。

注意:map()函数不改变原有的 list,而是返回一个新的 list。

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

python基础-requests模块、异常处理、Django部署、内置函数、网络编程

 

filter()函数:用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

python基础-requests模块、异常处理、Django部署、内置函数、网络编程