datetime,time使用:
模型类应用:
# flask
from datetime import datetime
注册时间
birthday = db.Column(db.DateTime, default=datetime.now)
登录时间
login_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)
时间戳 转 日期格式:
import time
a = time.time()
# 第一种方法:特点:格式多样性 time.localtime(a) 把时间戳转为结构化时间
time1 = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(a)) # 2022-12-13 21:56:59
from datetime import datetime, date
# 第二种方法:格式固定
time2 = datetime.fromtimestamp(a) # 2022-12-13 21:56:37.737468
time3 = date.fromtimestamp(a) # 2022-12-13
日期 转 时间戳格式:
from datetime import datetime
aa = datetime.now() # 2022-12-13 02:49:44.878916
import time
b = time.mktime(aa.timetuple()) # 1670942507.0
bb = int(time.mktime(aa.timetuple())) # 1670942549
格式化时间:
a = datetime.now()
# 2022-11-07 16:04:59.439881
from datetime import datetime
order_num = datetime.strftime(datetime.now(),%Y%m%d%H%M%S)
# 20221213024504
from datetime import datetime
element日期选择器 日期传参到后端 格式转换语法
t1 = datetime.strptime(time1,"%Y-%m-%dT%H:%M:%S.000Z")
flask具体操作:
req = reqparse.RequestParser()
req.add_argument('start_time')
args = req.parse_args()
args['start_time'] = datetime.strptime(args['start_time'], "%Y-%m-%dT%H:%M:%S.000Z")
时间戳的前五分钟计算:
import time
timestamp = int(time.time())
last_5min = timestamp - timestamp % 300 # 上一个5分钟整的时间戳
next_5min = timestamp - timestamp % 300 + 300 # 下一个5分钟整的时间戳
timestamp = int(time.time())
last_1h = timestamp - timestamp % 3600 # 上一个1小时整的时间戳
next_1h = timestamp - timestamp % 3600 + 3600 # 下一个1小时整的时间戳
strftime格式化后是str格式 strptime格式化后是datetime格式 同格式允许相减
import time
from datetime import datetime
# 当前日期
now = datetime.now() # 2022-12-13 02:51:25.182711
# 格式化当前日期
d2 = datetime.strftime(now, '%Y-%m-%d %H:%M:%S') # 2022-12-13 02:51:25
d3 = datetime.strptime(d2,'%Y-%m-%d %H:%M:%S')
# 2022-12-13 02:51:25
d3 = datetime.strptime(now.strftime('%Y-%m-%d %H:%M:%S'),
'%Y-%m-%d %H:%M:%S') # 2022-12-13 02:51:25
# 当前时间戳
now2 = int(time.time()) # 1670871085
# 当前时间d3-delta 得出七天前时间
import datetime
delta = datetime.timedelta(days=7) # 7 days, 0:00:00
d1 = d3 - delta # 2022-12-06 02:51:25 delta接收格式
# 7天前的日期 datetime格式 转时间戳
d1_unix = int(time.mktime(d1.timetuple())) # 1670266285
失效时间
date=30
'exp': int((datetime.datetime.now() + datetime.timedelta(seconds=date)).timestamp())
ORM语法
# 查询数据库最后三条数据
info = UserModel.objects.order_by('-id')[0:3]
name = request.query_params.get('name')
info = Shop.objects.filter(name__contains=name).all()
# contains 包含
交换元素
# python中交换元素
a = 2
b = 3
a, b = b, a
print(a) # a为3
# 其他编程需要有一个中间的变量来转换 变量设为temp
a = 2
b = 3
temp = a
a = b
b = temp
print(a) # a为3
字符串
字符串去除左右空格
.strip()
字符串分割(汉字数字符号都可以)
b = str.split('、')
c = re.split('、', str)
多个分割只能用下面这一种
a = '[、。]'
c = re.split(a, str)
str = '河南省、郑州市。张三'
a = '[、。]'
c = re.split(a, str)
print(c) # ['河南省', '郑州市', '张三']
q = ''.join(c)
print(q) # 河南省郑州市张三
字符串a 转 字典b
import json
b = json.loads(a)
bool类型
status = db.Column(db.Boolean,default=False,comment='是否冻结 0 不冻结 1 冻结')
重定向 刷新页面
返回时 跳转页面
return redirect('http://127.0.0.1:8080/home')
vue重定向页面
window.location.href = res.data.data.url
刷新当前页面
location.reload();
window.location.reload();
列表
list1 = ['a', 'b', 'c']
list2 = [1, 2, 3]
list1.extend(list2) # 对原列表进行扩展
print(list1) ['a', 'b', 'c', 1, 2, 3]
m=list1.pop(0) # 弹出第0个元素
print(list1) ['b', 'c', 1, 2, 3]
list1.append(9) # 尾部添加
print(list1) ['b', 'c', 1, 2, 3, 9]
# 随机取列表中一个元素
import random
list = [1, 2, 3, 6, 8, 9, 15, 16]
a = random.sample(list, 1)
print(a)
三元表达式
'status': '正常' if item.status else '冻结中',
'code': 200, 'msg': '预约成功' if user_info.subscribe == True else '取消预约'
vue三元写法
:class="i==now_index ? 'active' :''"
查找对应的id
GoodList[now_index].gid
# 三元表达式 如果是2的倍数加1,如果是4的倍数加2,否则加0
list = [3, 14, 15, 9, 26, 5, 35, 8, 97, 932]
a = 0
for i in list:
a += 1 if i % 2 == 0 and i % 4 != 0 else 2 if i % 4 == 0 else 0
print(a)
os,sys
"""
# 模块化导包
# 设置模块路径
import os, sys
BASE_DIRS1 = os.path.dirname(__file__)
# 添加模块路径 一层os.path.dirname 代表当前位置的父级目录
BASE_DIRS2 = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIRS2)
sys.path.append(BASE_DIRS2)
sys.path.append(os.path.join(BASE_DIRS2, 'scripts'))
from scripts import a
print(a.a)
"""
"""
# 相对路径导包
import sys
sys.path.append('..')
from static import static
"""
pip 命令
生成pip install 文档
pip freeze > req.txt
查看当前pip路径
pip -V
强制更新
python -m pip install -U --force-reinstall pip
升级pip版本命令
python -m pip install --upgrade pip
设置清华镜像
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
下载国外源超时解决办法:
输入:pip --default-timeout=1000 install -U faker
pip --default-timeout=1000 install -U +库名
分页
# flask,offset分页
# 偏移量 = 每页条数 * (当前页数 - 1)
offset = args["page_size"] * (args["page"] - 1)
user_list = UserModel.query.offset(offset).limit(args['page_size']).all()
# django,offset分页
page_number = request.query_params.get('page_number')
limit = request.query_params.get('limit')
offset = int(limit) * (int(page_number) - 1)
offset2 = int(limit) * int(page_number)
info2 = Shop.objects.all()[offset:offset2]
token生成,解析
生成token
token = jwt.encode(payload, key, algorithm='HS256')
解析token
payload = jwt.decode(token, key, algorithms='HS256')
前端存取 token
this.$axios
.get("/goods/user/collection/", {},{ //请求头携带一个token数据
headers:{'token':localStorage.getItem("token")||"", platform:"web"}
})
localStorage.setItem('token', resp.data.token)
模糊查询
user_info = UserModel.query.filter(UserModel.name.like('%' + search['name'] + '%'))
.filter(UserModel.name.like('%' + search['mobile'] + '%'))
获取元祖的值
x=({'a':'1','b':'22'},{'c':'aa','d':'99'})
print(x[0]['b'])
flask—sqlalchemy 计算 数据库中数据的总条数 获取总人数
func是方法
u=db.session.query(func.count(UserModel.uid)) u是一个数据库对象flask_sqlalchemy.BaseQuery
u=db.session.query(func.count(UserModel.uid)).first() u是一个元祖(总数量,)
u=db.session.query(func.count(UserModel.uid)).first()[0] u是一个整形int 是数据库里uid的总条数
逻辑删除的语法filter(UserModel.deleted_time == None)
u=db.session.query(func.count(UserModel.uid)).filter(UserModel.deleted_time == None).first()[0]
func方法 和 random方法 > 随机展示数据库5条数据
from sqlalchemy import func
top_all = TopicModel.query.order_by(func.rand()).limit(5)
import random
top_list 对象列表
random.shuffle(top_list)
取前四条 对象
top_list=top_list[:4]
random随机生成字母数字
ascii_letters字母 ascii_lowercase字母小写 ascii_uppercase字母大写 digits数字
code1 = ''.join(random.sample(string.ascii_uppercase, 4))
code2 = ''.join(random.sample(string.digits, 4))
code3 = ''.join(random.sample(string.ascii_letters, 4))
code4 = ''.join(random.sample(string.ascii_letters + string.digits, 4))
逻辑判断 >>
Boolean类型 (若新添加的值为True,其他均改为False)
如果新添加的多方Boll字段is_ok值Boolean类型为1 也就是True
if args['is_ok'] == 1:
循环多方列表 (que_info.top 一方对象.top表小名 正向查询)
for i in que_info.top:
将is_ok的其他所有值更改为False
i.is_ok = False
用户名随机且不重复
while True:
username = ''.join(random.sample(string.ascii_lowercase, 4))
user_is = UserModel.query.filter(UserModel.username == username).first()
if not user_is:
break
user_info.username=username
调用配置项
from flask import current_app
accid = current_app.config.get('ACC_ID')
Python pip 强制重新更新命令
python -m pip install -U --force-reinstall pip #强制重新更新
判断某个键名是否存在
判断某个键名是否存在 返回boll类型
is_exisits = a.exists('token')
代表被禁用
if is_exists:
有效期
exp = int(time.time() + 60)
获取一级分类信息
cates = Cate.objects.filter(cid=None)
request.FILES.get('file')
校验参数完整性
if not all([sku_id, image_url]):
用户密码加密
flask 加密,解密
from werkzeug.security import generate_password_hash, check_password_hash
MD5加密
import hashlib
def md5_jm(password):
md5 = hashlib.md5()
md5.update(password.encode())
return md5.hexdigest()
django加密
new_pwd = make_password(pwd)
对比账号和密码是否一样, 一样就登录成功
if not check_password(pwd, user.password):
更新时间
修改用户最后登录的时间
user.last_login_date = now()
修改数据库
user.save()
获取用户总数
django获取用户总数
user_num = User.objects.all().count()
获取当月每一天新增用户数
获取当前的月份:2022-08
year = time.strftime('%Y')
month = time.strftime('%m')
当前月份的天数
_, days = calendar.monthrange(int(year), int(month))
print('这个月有%s天', days)
datas = []
根据日期查询新增的人数
for i in range(1, days + 1):
if i < 10:
i = '0' + str(i)
过滤条件
date_ = year + '-' + month + '-' + str(i)
user_num = User.objects.filter(created_date__contains=date_).count()
datas.append({
'count': user_num,
'date': i
})
return Response({'msg': 'ok', 'data': datas})
日活跃量
date = time.strftime('%Y-%m-%d')
user_num = User.objects.filter(last_login_date__contains=date).count()
获取所有的用户信息(分页)
class UserInfo(APIView):
def get(self, request):
users = User.objects.all()
total = users.count()
获取用户的数量
获取当前页和每页数据
page_number = request.query_params.get('page')
page_size = request.query_params.get('pagesize')
paginator = Paginator(users, page_size)
data = paginator.get_page(page_number)
ser = UserSer(data, many=True)
return Response({'code': 200, 'data': ser.data, 'total': total})
推导式
获取所有的频道组名, 去除重复的组名
groups = CateGroup.objects.all()
列表推导式
group_name = set([i.name for i in groups])
字典推导式
group__dict_name = [{"name": i} for i in group_name]
元祖转列表
data_list = [list(i) for i in WorldCup]
x = [i for i in list if i % 2 == 0]
print("* [{}]: {}".format(day['key'], day['value']))
字典推导式:
# 打印非windows系统的 Python 安装介绍
if __name__ == '__main__':
install = {
"w": {
"platform": "Window",
"desc": "请下载 Windows 安装包安装:https://www.python.org/downloads/windows/"
},
"l": {
"platform": "Linux",
"desc": "请下载 Linux 的 Python 源码安装:https://www.python.org/downloads/source/",
},
"m": {
"platform": "MacOS",
"desc": "请下载 Mac 的安装包:https://www.python.org/downloads/macos/,或者使用 brew install python 安装",
}
}
# for循环
x = []
for i in install:
if install.get(i).get('platform') != "Window":
x.append(install.get(i))
print(x)
# 推导式for循环
x2 = [install.get(key) for key in install if install.get(key).get('platform') != 'Window']
print(x2)
打印结果:
[{'platform': 'Linux', 'desc': '请下载 Linux 的 Python 源码安装:https://www.python.org/downloads/source/'}, {'platform': 'MacOS', 'desc': '请下载 Mac 的安装包:https://www.python.org/downloads/macos/,或者使用 brew install python 安装'}]
[{'platform': 'Linux', 'desc': '请下载 Linux 的 Python 源码安装:https://www.python.org/downloads/source/'}, {'platform': 'MacOS', 'desc': '请下载 Mac 的安装包:https://www.python.org/downloads/macos/,或者使用 brew install python 安装'}]
重组表字段
class CouponData(APIView):
def get(self, request):
cou = Coupon.objects.all()
couponlist = []
for i in cou:
dic = {
'id': i.id,
'name': i.name,
'coupon_type': i.coupon_type.type_name,
'sku_name': i.good.name,
}
couponlist.append(dic)
return Response({'code': 200, 'msg': '获取优惠券成功', 'couponlist': couponlist})
django添加优惠券
class CouponView(APIView):
def post(self, request):
"""添加优惠券"""
# 1, 接收前端传来的数据
# data = request.data
# 2, 校验数据
ser = CouponSer(data=request.data)
# 校验参数
result = ser.is_valid(raise_exception=True)
if result:
# 此时说名参数没问题, 可以添加
# 此时序列化器会调用create()方法实现添加, 但是前提是:前端传来参数的字段名要和模型类中的字段名一致
ser.save()
else:
# 此时说明校验有错
print("校验前端传来的参数失败,原因是>>>", ser.error_messages)
return Response({'message': ser.error_messages, "code": 400})
# 3. 添加
return Response({'message': "添加成功", "code": 201})