OnlineJudge/utils/shortcuts.py

60 lines
1.9 KiB
Python
Raw Normal View History

import datetime
2017-10-01 19:54:34 +00:00
import random
from base64 import b64encode
2017-10-01 19:54:34 +00:00
from io import BytesIO
2016-11-19 04:32:23 +00:00
from django.utils.crypto import get_random_string
2017-04-18 18:03:48 +00:00
2016-10-29 18:17:35 +00:00
def rand_str(length=32, type="lower_hex"):
"""
2016-11-19 04:32:23 +00:00
生成指定长度的随机字符串或者数字, 可以用于密钥等安全场景
:param length: 字符串或者数字的长度
:param type: str 代表随机字符串num 代表随机数字
:return: 字符串
2016-10-29 18:17:35 +00:00
"""
if type == "str":
2016-11-19 04:32:23 +00:00
return get_random_string(length, allowed_chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
2016-10-29 18:17:35 +00:00
elif type == "lower_str":
2016-11-19 04:32:23 +00:00
return get_random_string(length, allowed_chars="abcdefghijklmnopqrstuvwxyz0123456789")
2016-10-29 18:17:35 +00:00
elif type == "lower_hex":
2016-11-19 04:32:23 +00:00
return random.choice("123456789abcdef") + get_random_string(length - 1, allowed_chars="0123456789abcdef")
2016-10-29 18:17:35 +00:00
else:
2017-01-23 08:01:56 +00:00
return random.choice("123456789") + get_random_string(length - 1, allowed_chars="0123456789")
2017-05-08 09:29:01 +00:00
def build_query_string(kv_data, ignore_none=True):
# {"a": 1, "b": "test"} -> "?a=1&b=test"
query_string = ""
2017-05-15 05:09:54 +00:00
for k, v in kv_data.items():
2017-05-08 09:29:01 +00:00
if ignore_none is True and kv_data[k] is None:
continue
if query_string != "":
query_string += "&"
else:
query_string = "?"
query_string += (k + "=" + str(v))
return query_string
def img2base64(img):
with BytesIO() as buf:
img.save(buf, "gif")
buf_str = buf.getvalue()
img_prefix = "data:image/png;base64,"
b64_str = img_prefix + b64encode(buf_str).decode("utf-8")
return b64_str
def datetime2str(value, format="iso-8601"):
if format.lower() == "iso-8601":
value = value.isoformat()
if value.endswith("+00:00"):
value = value[:-6] + "Z"
return value
return value.strftime(format)
def timestamp2utcstr(value):
return datetime.datetime.utcfromtimestamp(value).isoformat()