深入解析域名短链接生成原理及其在Python/Flask中的实现策略:一篇全面的指南与代码示例

这篇具有很好参考价值的文章主要介绍了深入解析域名短链接生成原理及其在Python/Flask中的实现策略:一篇全面的指南与代码示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为了构建一个高效且用户友好的域名短链服务,我们可以将项目精简为以下核心功能板块:

1. 用户管理

  • 注册与登录:允许用户创建账户并登录系统。 这部分内容可以参考另一片文章实现:

快速实现用户认证:使用Python和Flask配合PyJWT生成与解密Token的教程及示例代码

  • 资料管理:用户可以管理自己的个人资料,包括密码修改等。

2. 短链接功能

  • 短链接生成:用户输入长链接,系统生成短链接。
  • 链接管理:用户可以查看、管理自己生成的所有短链接。
  • 访问统计:提供短链接的访问次数和基本访问数据统计。

3. API服务

  • 生成与查询API:供开发者使用的接口,实现短链接的生成和查询。

4. 系统管理

  • 日志记录:记录系统操作日志,便于维护和故障排查。
  • 性能监控:监测系统性能,确保服务的稳定性。

通过专注于这些核心板块,可以确保系统覆盖短链接服务的基本需求,同时保持项目的可管理性和扩展性。这样的结构既可以满足大多数用户的需求,也为将来添加新功能留下了空间。

本文章着重介绍以下几个功能块:

1、生成短链,保存短链

#学习交流 访问
# https://v.iiar.cn


# 生成一个5位长度的随机大写字母和数字的组合
def generate_random_string(length=5):
    characters = string.ascii_uppercase + string.digits  # 大写字母和数字
    return ''.join(random.choice(characters) for _ in range(length))

# 生成一个不重复的随机字符组合
def generate_unique_combination():
    while True:
        random_string = generate_random_string()
        existing_record = XUrlLink.query.filter_by(random_characters=random_string).first()
        if not existing_record:
            return random_string
# 创建短链接
def create_short_link_func(url_link, admin_id):
    # 随机字符
    random_string = generate_unique_combination()
    new_log = XUrlLink(
        url_link=url_link,
        random_characters=random_string,
        creator_id=admin_id
    )
    db.session.add(new_log)
    db.session.commit()

#模型部分
class XUrlLink(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键ID')
    url_link = db.Column(db.String(500), comment='域名')
    random_characters = db.Column(db.String(100), comment='随机字符')
    creator_id = db.Column(db.Integer, default=0, comment='创建人id')
    creation_time = db.Column(db.DateTime, default=datetime.now, comment='创建时间')
    valid_status = db.Column(db.String(100), default='有效', comment='有效状态')

    def to_dict(self):
        return {
            'id': self.id,
            'url_link': self.url_link,
            'random_characters': self.random_characters,
            'creator_id': self.creator_id,
            'creation_time': self.creation_time.strftime('%Y-%m-%d %H:%M:%S') if self.creation_time else None,
            'valid_status': self.valid_status
        }

代码解释:

这段代码是一个短链接生成服务的实现,主要由三部分组成:随机字符串生成函数、唯一随机组合生成函数、创建短链接的函数,以及一个数据库模型定义。以下是对每个部分的详细解释:

1. 随机字符串生成函数 (generate_random_string)

这个函数的目的是生成一个指定长度(默认为5个字符)的随机字符串,这个字符串由大写英文字母和数字组成。具体实现方式如下:

  • characters变量通过连接string.ascii_uppercase(所有大写字母)和string.digits(所有数字,即0-9)得到一个包含所有大写字母和数字的字符串。
  • 使用列表推导式和random.choice(characters)在上述字符集中随机选择字符,生成指定长度的字符串。这里_是一个惯用的占位符,表示循环变量在循环体中不会被使用。
  • return ''.join(...)将列表推导式生成的字符列表连接成一个字符串并返回。

2. 唯一随机组合生成函数 (generate_unique_combination)

该函数确保生成的随机字符串在数据库中是唯一的,避免与已存在的短链接冲突。具体流程如下:

  • 使用while True创建一个无限循环,不断尝试生成新的随机字符串,直到找到一个在数据库中不存在的字符串。
  • existing_record = XUrlLink.query.filter_by(random_characters=random_string).first()尝试在XUrlLink表中查询是否存在当前生成的随机字符串。如果查询结果为None(即existing_recordFalse),说明生成的字符串在数据库中是唯一的。
  • 如果生成的随机字符串唯一,则通过return random_string返回这个字符串并退出循环。

3. 创建短链接的函数 (create_short_link_func)

此函数用于根据给定的原始链接和管理员ID创建一个短链接记录:

  • random_string = generate_unique_combination()调用上述函数生成一个唯一的随机字符串。
  • 创建一个XUrlLink实例,使用提供的原始链接、生成的随机字符串和管理员ID作为参数初始化。
  • 通过db.session.add(new_log)将新记录添加到数据库会话中,然后通过db.session.commit()提交会话,将记录永久保存到数据库中。

4. 数据库模型 (XUrlLink)

XUrlLink类定义了数据库中用于存储短链接信息的表结构:

  • 包含字段如id(主键,自增)、url_link(原始链接)、random_characters(生成的随机字符串,用作短链接的唯一标识)、creator_id(创建者ID)、creation_time(创建时间,默认为当前时间)、valid_status(有效状态,默认为"有效")。
  • to_dict方法用于将记录的信息转换为字典格式,便于后续处理或将数据返回给客户端。

整体上,这段代码展示了如何在Flask应用中实现一个简单的短链接生成服务,包括生成短链接的唯一标识、保存短链接信息到数据库、以及定义用于操作这些信息的模型。

2、使用短链、记录短链使用记录

#学习交流 访问
# https://v.iiar.cn


@app.route('/<random_string>')
def query_and_respond(random_string):
    result = f"查询结果为: {random_string}"
    url_info = XUrlLink.query.filter_by(random_characters=random_string).first()
    if url_info:
        user_agent = request.headers.get('User-Agent')
        user_agent_parsed = parse(user_agent)

        ip_address = request.remote_addr
        url_accessed = request.url

        device_info = {
            'ip_address': ip_address,
            'url_accessed': url_accessed,
            'is_mobile': user_agent_parsed.is_mobile,
            'is_tablet': user_agent_parsed.is_tablet,
            'is_touch_capable': user_agent_parsed.is_touch_capable,
            'is_pc': user_agent_parsed.is_pc,
            'is_bot': user_agent_parsed.is_bot,
            'browser': user_agent_parsed.browser.family,
            'browser_version': user_agent_parsed.browser.version_string,
            'os': user_agent_parsed.os.family,
            'os_version': user_agent_parsed.os.version_string,
            'device': user_agent_parsed.device.family
        }

        # 记录或处理获取到的信息
        # print(ip_address, url_accessed, device_info)
        new_log = XOpenUrlLog(
            random_characters=random_string,
            user_agent=json.dumps(device_info)
        )
        db.session.add(new_log)
        db.session.commit()
        # return device_info
        pay_url = url_info.url_link
        return redirect(pay_url, code=301)
    # url不存在,跳转引导页
    no_url = '不存在的短链'
    return no_url

# 访问url的记录模型
class XOpenUrlLog(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='主键ID')
    random_characters = db.Column(db.String(100), comment='随机字符')
    user_agent = db.Column(db.Text, comment='随机字符')
    creation_time = db.Column(db.DateTime, default=datetime.now, comment='创建时间')

    def to_dict(self):
        return {
            'id': self.id,
            'random_characters': self.random_characters,
            'user_agent': self.user_agent,
            'creation_time': self.creation_time.strftime('%Y-%m-%d %H:%M:%S') if self.creation_time else None
        }

记录内容大概如下:
深入解析域名短链接生成原理及其在Python/Flask中的实现策略:一篇全面的指南与代码示例,python,flask,开发语言

代码解释:

这段代码是Flask框架中的一个路由处理函数,用于处理对任意短链接(通过<random_string>指定)的访问请求,并记录访问者的设备信息,最后将用户重定向到与短链接关联的原始URL。此外,还定义了一个用于记录访问信息的数据库模型XOpenUrlLog。下面是对代码的具体解释:

路由处理函数 (query_and_respond)

  • @app.route('/<random_string>')装饰器定义了一个动态路由,random_string是动态部分,代表访问的短链接标识。
  • 函数首先尝试在XUrlLink数据库表中查找random_characters字段匹配random_string的记录。如果找到,表示短链接有效。
  • 使用request.headers.get('User-Agent')获取用户代理字符串,然后使用user_agents库的parse函数解析这个字符串,获取关于访问者设备的详细信息。
  • 收集访问者的IP地址(request.remote_addr)和访问的完整URL(request.url)。
  • 创建一个字典device_info,包含解析后的设备信息,如是否为移动设备、操作系统、浏览器类型等。
  • 实例化XOpenUrlLog模型,记录随机字符和序列化后的用户代理信息(json.dumps(device_info)),然后将这条记录添加到数据库并提交。
  • 如果找到对应的短链接记录,将用户重定向到记录中的url_link指定的原始URL(使用redirect函数)。
  • 如果未找到短链接记录,返回一个错误消息(“不存在的短链”)。

访问URL的记录模型 (XOpenUrlLog)

  • 定义了一个数据库模型XOpenUrlLog,用于记录每次短链接被访问时的信息。
  • 模型字段包括:
    • id:记录的唯一标识,主键。
    • random_characters:访问的短链接标识。
    • user_agent:访问者的设备信息,存储为文本。
    • creation_time:记录创建的时间,默认为当前时间。
  • to_dict方法用于将记录的信息转换为字典格式,通常用于数据的序列化或API响应。

这段代码实现的功能包括解析和记录访问者的设备信息,以及处理短链接的重定向逻辑,同时通过XOpenUrlLog模型记录每次访问的详细信息,这些信息可用于后续的数据分析和监控。文章来源地址https://www.toymoban.com/news/detail-836757.html

查看短链使用情况,就需要各位自己根据需要的数据去分析了,如果对这个功能感兴趣欢迎一起交流学习

#学习交流 访问
# https://v.iiar.cn

到了这里,关于深入解析域名短链接生成原理及其在Python/Flask中的实现策略:一篇全面的指南与代码示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】【Matplotlib】深入解析plt.grid()---原理、应用与注意事项

    【Python】【Matplotlib】深入解析plt.grid()—原理、应用、源码与注意事项 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更

    2024年04月09日
    浏览(47)
  • 深入解析:树结构及其应用

    🎉欢迎来到数据结构学习专栏~深入解析:树结构及其应用 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:数据结构学习 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果

    2024年02月11日
    浏览(32)
  • 深入理解Web注解:解析常用注解及其应用场景

    Web(World Wide Web)是由英国物理学家蒂姆·伯纳斯-李于1989年发明的一个基于互联网的信息系统,也是互联网最为知名和常用的应用之一。它通过一种名为超文本传输协议(HTTP)的协议来传输数据,并且使用统一资源定位符(URL)来标识网络上的资源。 Web的基本组成部分包括

    2024年02月05日
    浏览(38)
  • 深入理解 Redis 高可用性方案及其原理

    深入理解 Redis 高可用性方案及其原理 在当今数据驱动的时代,Redis 作为一种高性能的键值存储数据库,在现代应用架构中扮演着举足轻重的角色。无论是作为缓存系统、消息队列还是轻量级数据库,Redis 以其卓越的性能和灵活性赢得了广泛的应用。然而,随着业务规模的不

    2024年03月25日
    浏览(47)
  • 深入解析glibc中的strcpy和strncpy函数及其安全考量

    在C语言编程中,字符串操作是常见的任务之一。`strcpy`和`strncpy`作为GNU C Library(glibc)提供的两个核心字符串复制函数,在实际开发中扮演了重要角色。然而,它们的安全性特性却有所差异,这直接影响到我们是否应当在特定场景下使用这些函数。本文将详细解析glibc中这两

    2024年04月25日
    浏览(24)
  • 深入解析SNMP协议及其在网络设备管理中的应用

    SNMP(Simple Network Management Protocol,简单网络管理协议)作为一种用于网络设备管理的协议,在实现网络设备的监控、配置和故障排除方面发挥着重要的作用。本文将深入解析SNMP协议的工作原理、重要概念和功能,并探讨它在网络设备管理中的应用。 首先,让我们对SNMP协议进

    2024年02月10日
    浏览(32)
  • 【C语言】深入解析C语言中的回调函数及其应用

    目录 什么是回调函数? 回调函数有什么作用? 额外的进阶用法? 1. 传递多个参数: 2. 回调函数和数据封装: 3. 函数指针的灵活性: 回调函数的概念可能有些抽象,让我们尝试用一个简单的生活场景来解释它。假设你有一项重要任务需要完成,但任务的一部分要依赖于其他

    2024年02月12日
    浏览(40)
  • 轻松搭建短域名短链接服务系统,可选权限认证,并自动生成证书认证把nginx的http访问转换为https加密访问,完整步骤和代码

    轻松搭建短域名短链接服务系统,可选权限认证,并自动生成证书认证把nginx的http访问转换为https加密访问,完整步骤和代码。 在互联网信息爆炸的时代,网址复杂而冗长,很难在口头告知他人,也难以分享到社交媒体上。因此,网址缩短服务应运而生。本文将介绍其中的一

    2024年01月23日
    浏览(29)
  • Python使用flask框架与前端建立websocket链接,并进行数据交互

    后端采用的框架为flask,前端用的flask自带的html编写,实现的功能为:前后端建立websocket链接并进行数据交互 一、编写一个flask后端服务 常规创建方式就可以,创建一个flask服务。声明一个websocket实例,以websocket的方式启动这个服务。 安装相关依赖: 声明应用和websocket实例

    2024年04月11日
    浏览(35)
  • 深入解析Spring的IOC与AOP及其在项目中的应用

    在现代的软件开发中,为了提高代码的可维护性、可扩展性以及降低代码的耦合度,使用设计模式和面向切面编程(AOP)成为了程序员们常用的技术手段。Spring作为一个优秀的Java开发框架,提供了IOC和AOP两个核心特性,极大地简化了开发工作。本文将深入探讨Spring的IOC和AO

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包