Python 语法笔记 >>

 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})

你可能感兴趣的:(常用笔记,Python,安全,1024程序员节)