表的创建:
class ShortCode(models.Model):
key = models.CharField(verbose_name="唯一值", max_length=128)
short_code = models.CharField(verbose_name="短链", max_length=16)
long_code = models.TextField(verbose_name="长链")
class Meta:
db_table = "short_code"
verbose_name = "短链"
生成短链:
def generate_random_string(length):
"""生成一个指定长度的随机字符串"""
letters_and_digits = string.ascii_letters + string.digits # 包含大小写字母和数字
random_string = ''.join(random.choice(letters_and_digits) for i in range(length))
return random_string
short_code = None
for i in range(10):
short_code = generate_random_string(6)
if not ShortCode.objects.filter(short_code=short_code).exists():
break
if not short_code:
raise APIException('短链生成失败')
ShortCode.objects.filter(key=ggsq_obj.code).delete()
ShortCode.objects.create(long_code=long_code, short_code=short_code, key=k)
访问短链:
# url中:
path('<str:short_code>/', views_short.Redirect2Original.as_view(), name='redirect_to_original'),
# views.py:
class Redirect2Original(APIView):
def get(self, request, short_code):
try:
short_url = ShortCode.objects.get(short_code=short_code)
return redirect(short_url.long_code)
except ShortCode.DoesNotExist:
# 处理短链不存在的情况,例如返回404错误
raise APIException('当前短链不存在或已失效')