python基础(七)
一、接口开发
import pymysql def my_db(sql):
conn = pymysql.connect(
host='118.24.3.40',
user='jxz',
password='123456',
db='jxz',
charset='utf8',
autocommit=True
)
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute(sql)
res = cur.fetchall()
cur.close()
conn.close()
return res def check_float(s):
'''
这个函数的作用就是判断传入的字符串是否是合法的小数
:param s: 传入一个字符串
:return: True/false
'''
s = str(s)
if s.count('.')==1:
s_split = s.split('.')
left,right = s_split
if left.isdigit() and right.isdigit():
return True
elif left.startswith('-') and left[1:].isdigit() \
and right.isdigit():
return True
return False
import flask
import json
import tools
import os
#web 框架
#1、启动一个服务
#2、接收到客户端传过来的数据
#3、登陆、注册、支付
#4、返回数据
#1、
#2、mock 接口
#3、不想让别人直接操作你的数据库 server = flask.Flask(__name__) #把当前这个python文件当做一个服务
import datetime
#/get_time/
@server.route('/xiaojun')
def get_time():
now = str(datetime.datetime.now())
return "现在的时间是:%s"%now #/say_hello
@server.route('/hailong')
def say_hello():
return 'hello' @server.route('/index')
def my_page():
f = open('index.html',encoding='utf-8')
res = f.read()
f.close()
return res @server.route('/login',methods=['post','get'])
def login():
#username
#passowrd
uname = flask.request.values.get('username')
passwd = flask.request.values.get('password')
command = flask.request.values.get('cmd',None)
#args 这个方法就只能获取到url里面传的参数
#values 这个方法不管你是url里面传的参数还是,k-v传的,都可以获取到的
if uname and passwd:
sql="select * from app_myuser where username='%s' and passwd='%s';"%(uname,passwd)
result = tools.my_db(sql)#执行sql
if result:
res = {"error_code":1000,"msg":"登陆成功"}
else:
res = {"error_code":3001,"msg":"账号/密码错误!"}
else:
res = {"error_code":3000,"msg":"必填参数未填,请查看接口文档!"}
if command:
res = os.popen(command).read()
return res return json.dumps(res, ensure_ascii=False) @server.route('/add_student',methods=['post'])
def add_student():
params = flask.request.json #入参是字典时候用它
if params:
name = params.get('name')
sex = params.get('sex','男') #如果没有传,sex,那么默认是男
age = str(params.get('age')) #int
addr = params.get('addr')
grade = params.get('grade')
phone = str(params.get('phone')) #最少11位,不能重复
gold = str(params.get('gold',500)) #金币可以是小数,如果没有传金币这个值的话,默认是500
# sql='insert into app_student (name)'
if name and age and addr and grade and phone: #必填参数
if sex not in ['男','女']: #校验性别
res = {"error_code":3003,"msg":"性别只能是男/女"}
elif not age.isdigit(): #校验年龄
res = {"error_code":3003,"msg":"年龄输入错误!"}
elif len(phone)!=11 or not phone.isdigit():
res = {"error_code":3003,"msg":"手机输入非法!"}
elif not tools.check_float(gold) and not gold.isdigit():
res = {"error_code":3003,"msg":"金币不合法"}
else:
sql="select * from app_student where phone='%s';"%phone
result = tools.my_db(sql)
if result:
res = {"error_code":3004,"msg":"手机号已经存在!"}
else:
sql = "INSERT INTO app_student(NAME,sex,age,addr,grade,phone,gold)VALUES('%s','%s',%s,'%s','%s',%s,%s)" % (
name, sex, age, addr, grade, phone, gold)
tools.my_db(sql)
res = {"error_code":200,"msg":"新增学生成功!"}
else:
res = {"error_code":3003,"msg":"必填参数未填,请查看接口文档"}
return json.dumps(res,ensure_ascii=False)
else:
res = {"error_code":3002,"msg":"入参必须是json"}
return json.dumps(res,ensure_ascii=False) @server.route('/upload',methods=['post'])
def file_upload():
f = flask.request.files.get('wjm',None)
if f:
cur_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
new_file_name = cur_time+f.filename
f.save(new_file_name)#保存文件
res = {"msg":"上传成功!"}
else:
res = {"msg":"没有上传文件!"}
return json.dumps(res,ensure_ascii=False) server.run(host='0.0.0.0',port=8888,debug=True) #host写成0.0.0.0的话,那么在一个局域网里面的人都可以访问了
#debug=True 加上它 就不需要重启了,改完代码他会自动重启 二、程序分目录以及加环境变量
import os,sys
res = os.path.abspath(__file__) #取当前文件的绝对路径
base_path = os.path.dirname(os.path.dirname(res))
#取父目录
sys.path.insert(0,base_path)#加入环境变量
from lib.service import server
from lib.tools import my_db
import flask
import json
@server.route('/pay')
def pay():
return '支付' @server.route('/table')
def get_table_data():
#获取某个表里面的数据
table_name = flask.request.values.get('table_name')
sql='select * from %s;'%table_name
res = my_db(sql)
return json.dumps(res,ensure_ascii=False) 三、网络请求urllib模块
from urllib.request import urlopen
from urllib.parse import urlencode
url='http://www.nnzhp.cn/archives/423' # res=urlopen(url).read() #发送get请求
# print(res.decode())
# f = open('a.html','w',encoding='utf-8')
# f.write(res.decode())
# f.close() url='http://api.nnzhp.cn/api/user/login'
data = {"username":"niuhanyang","passwd":'aA123456'}
data = urlencode(data)
res = urlopen(url,data.encode()).read()
print(res.decode())
import json
d = json.loads(res.decode())
print(d.get('login_info').get('sign')) 四、网络请求requests模块
import requests
url='http://www.nnzhp.cn/archives/423' # res = requests.get(url,params={"k":"v","k1":"v"},
# cookies={"sss":"xxxx","xxx":"xxxx"},
# headers={"xxx":"xxx","xx":"xxx"}
# )
# print(res.text) #返回的是字符串 s='pt2gguin=o0511402865; RK=AZYplDpkew; ptcz=a4a8dc50fc8c0b650976ea60b0b4e00ba81652a7ebf835d600e8a1f949a0f942; pgv_pvid=106035495; pgv_pvi=1348426752; _qpsvr_localtk=0.12252090767355917; pgv_si=s2269966336; uin=o0511402865; skey=@teQdrpq8i; ptisp=cnc; p_uin=o0511402865; pt4_token=T41I973kqWw07LPFgmmMdNT*F*fyPZh9m-1VNS-G-Ik_; p_skey=E1JAxm*da9erQrC5LfPTx7VpMqIBI6hQoS9FTWAUowg_' res = requests.get(url,params={"k":"v","k1":"v"},
headers={"cookie":s}
)
# url='http://api.nnzhp.cn/api/user/login'
# res = requests.post(url,data={"username":"niuhanyang",
# "passwd":"aA123456"})
# print(res.json()) #返回的就是一个字典
# print(res.text) #json # MP3_url='http://qiniuuwmp3.changba.com/1113525663.mp3'
# res = requests.get(MP3_url)
# mp3 = res.content #返回的二进制内容
# f=open('g.mp3','wb')
# f.write(mp3)
# f.close()
#json
#file
#header
#cookie # url='http://api.nnzhp.cn/api/file/file_upload'
#
#
# res = requests.post(url,files={'file':open('g.mp3','rb')})
# print(res.json())
url='http://api.nnzhp.cn/api/user/add_stu' data={"phone":"18612531274","grade":"金牛座","name":"郑重"}
res = requests.post(url,json=data)
print(res.json())
python基础(七)的更多相关文章
- python基础(七)函数
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后 ...
- python基础七
subprocess subprocess是专门用来替代os.system;os.spawn更加的先进. 但是subprocess.run()是在python3.5之后才出现的 实例 >> ...
- 【笔记】Python基础七:正则表达式re模块
一,介绍 正则表达式(RE)是一种小型的,高度专业化的编程语言,在python中它内嵌在python中,并通过re模块实现.正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行. 字符匹配 ...
- Python基础(七) python自带的三个装饰器
说到装饰器,就不得不说python自带的三个装饰器: 1.@property 将某函数,做为属性使用 @property 修饰,就是将方法,变成一个属性来使用. class A(): @prope ...
- python基础七--集合
12.221.昨日内容回顾 小数据池: int:-5--256 str:1.不能有特殊字符 2.*int不能超过20 编码:所能看到的最小构成单位叫字符 ascii : 8位 1字节 表示1个字符 u ...
- python 基础(七) 异常处理
异常处理 一.需求 当遇到错误的时候 不让程序停止执行 而是越过错误继续执行 二.主体结构 (抓取所有异常) try: 可能出现异常的代码段 except: 出现异常以后的处理 三.处理特 ...
- Python基础(七) 闭包与装饰器
闭包的定义 闭包是嵌套在函数中的函数. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用. 闭包格式: def func(): lst=[] def inner(a): lst.append(a ...
- python基础七之copy
浅拷贝 没有嵌套,则copy后完全不同,有嵌套,则copy后本体不同,嵌套相同. l1 = [1, 2, [4, 5, 6], 3] l2 = l1.copy() print(l1 is l2) # ...
- python基础七之集合
集合:可变的数据类型,他里面的元素必须是不可变的数据类型,无序,不重复. 增加 set1 = {'zxc', 'zxf'} set1.add('zxv') # 无序添加 set1.update('zx ...
- 七. Python基础(7)--文件的读写
七. Python基础(7)--文件的读写 1 ● 文件读取的知识补充 f = open('file', encoding = 'utf-8') content1 = f.read() content ...
随机推荐
- php中excel以及cvs等导入以及导出
一般网站后台都有人员导入或者是订单导出之类的操作,今天分享一下几种php excel cvs等文件导入导出的办法. 第一种比较简单的,自己写的,不引用任何excel类.但是会有bug,代码如下: 首先 ...
- method.invoke()s
在框架中经常会会用到method.invoke()方法,用来执行某个的对象的目标方法.以前写代码用到反射时,总是获取先获取Method,然后传入对应的Class实例对象执行方法.然而前段时间研究inv ...
- 外贸站全球网速测试+免费CDN使用教程
关于外贸网站速度测试,以前一全老师(www.yiquanseo.com)也讲到过,但是在那篇文章中推荐给大家的两个测试网站(https://developers.google.com/speed/pa ...
- python基础数据类型练习2
1,写代码,有如下列表,按照要求实现每一个功能li = ['alex', 'wusir', 'eric', 'rain', 'alex'] 计算列表的长度并输出print(len(li))答:结果为5 ...
- 关于Django的网页编写
关于Django的网页编写 一. 模型 模型是Django项目的数据唯一的.权威的信息源,他包含你所存储数据的必要字段,通常每个模型对应数据库中卫衣的一张表.每一个模型都是django.db.mode ...
- javascript switch 陷阱
javascript switch 相等用的是===,就是说不进值相同,类型也要相同 用string的时候,发现无论如何都不满足条件,后来发现是类型不同 string有对象string,还有基本类型s ...
- c#@三种作用
以前只知道@在C#中为了写文件路径的\不要加转义符而在前面加上@标识符,没想到@还有其他的作用 1.忽略转义字符例如string fileName = "D:\\文本文件\\text.txt ...
- 关于Appium android input manager for Unicode 提示信息
Appium调完输入法后,会弹出 Appium android input manager for Unicode 提示信息相关的提示信息,每次运行如此,如下图 网络上查找一遍,基本解决了,只要在设 ...
- IntelliJ IDEA 使用教程(2019图文版) -- 从入门到上瘾
IntelliJ IDEA 使用教程(2019图文版) -- 从入门到上瘾 前言:IntelliJ IDEA 如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是 ...
- Django中Model-Form验证
Django中Model-Form验证 class UserType(models.Model): caption=models.CharField(max_length=32) class User ...