django短链

表的创建:

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('当前短链不存在或已失效')

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值