python - 是否可以在没有 "any"框架的情况下使用 python 编写 Web 应用程序?

标签 python django web frameworks

我以前从事过 PHP 工作,想了解 python Web 编程。但一切对我来说都是模棱两可的。

是否可以在没有“任何”框架的情况下使用 python 来编写 Web 应用程序?

我知道框架让一切变得简单,即使没有框架也可以编写 Web 应用程序,但这对于大型项目来说是不合逻辑的。但我的目标只是学习,因为我认为开始使用框架编程不是一个好主意,我们应该了解一些有关 Web 应用程序中纯 Python 的信息。所以想象一下我想要制作非常非常简单的网页,例如 hello world 或小计数器或小 api。请不要向我提供像 Flask 这样的轻量级框架。我只是想知道纯Python可以创建网页吗?

最佳答案

是的,从技术上讲,您可以使用“纯Python”创建网页,但您肯定不想这样做!编程最美妙的部分是,有数百万人努力创建“框架”,例如 Flask 或 Django,它们极大地简化了工作提出申请所需的信息。

如果您的目标是“只是学习”,那么使用您不熟悉的框架是一个很好的开始方式。学习编程并不是关于运行代码各个方面所需的技术知识,而是关于了解如何针对您尝试构建的特定应用程序提出正确的问题

程序员。如果有可以在代码中采用的快捷方式,您应该采用它(除非您有充分的理由不这样做)。

想想这个例子:

我有一个已转换为字符串的列表:

myStringList = "['foo', 'bar', 'foobar']"

如何将此字符串转换为我的计算机可以解释为列表的格式?

可以创建一个像这样的函数:

def stringToList(node_or_string):
    if isinstance(node_or_string, str):
        node_or_string = parse(node_or_string, mode='eval')
    if isinstance(node_or_string, Expression):
        node_or_string = node_or_string.body
    def _convert_num(node):
        if isinstance(node, Constant):
            if isinstance(node.value, (int, float, complex)):
                return node.value
        elif isinstance(node, Num):
            return node.n
        raise ValueError('malformed node or string: ' + repr(node))
    def _convert_signed_num(node):
        if isinstance(node, UnaryOp) and isinstance(node.op, (UAdd, USub)):
            operand = _convert_num(node.operand)
            if isinstance(node.op, UAdd):
                return + operand
            else:
                return - operand
        return _convert_num(node)
    def _convert(node):
        if isinstance(node, Constant):
            return node.value
        elif isinstance(node, (Str, Bytes)):
            return node.s
        elif isinstance(node, Num):
            return node.n
        elif isinstance(node, Tuple):
            return tuple(map(_convert, node.elts))
        elif isinstance(node, List):
            return list(map(_convert, node.elts))
        elif isinstance(node, Set):
            return set(map(_convert, node.elts))
        elif isinstance(node, Dict):
            return dict(zip(map(_convert, node.keys),
                            map(_convert, node.values)))
        elif isinstance(node, NameConstant):
            return node.value
        elif isinstance(node, BinOp) and isinstance(node.op, (Add, Sub)):
            left = _convert_signed_num(node.left)
            right = _convert_num(node.right)
            if isinstance(left, (int, float)) and isinstance(right, complex):
                if isinstance(node.op, Add):
                    return left + right
                else:
                    return left - right
        return _convert_signed_num(node)
    return _convert(node_or_string)

并这样调用它:

myList = stringToList(myStringList)

print(myStringList[0] # [
print(myList[0]) # foo

或者我可以简单地使用默认 python 库中精彩的 ast 包并获得相同的结果:

import ast

myList = ast.literal_eval(myStringList)

print(myList[0]) # foo

stringToList 函数的所有功劳都归 ast package 的创建者所有。 ,因为我只是从源代码中复制了它。

要添加一个“充分理由”的示例来创建您自己的包/框架,假设我出于某种原因需要使用 eval 函数。众所周知,evaldangerous一般来说,不应该使用。如果我真的需要使用它,并且没有任何替代方案(咳咳,literal_eval),唯一的解决方案就是创建我自己的 eval 函数版本,以避免出现可利用的代码。

关于python - 是否可以在没有 "any"框架的情况下使用 python 编写 Web 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55071890/

相关文章:

python - 与外部 API 交互的基本电影数据库

javascript - 纯前端 + REST 后端网站的正确术语是什么?

html - 网站上的随机点?

python - Ubuntu 中的多个版本的 Python

python - 返回包含 python 字典中特定文本的所有值

Django - http 代码 304,如何在测试服务器中解决?

javascript - 事件未触发(onclick)

python - 使用 pandas groupby 查找唯一的列组合并保存为 df

python - 如何使用 PyMongo 将索引从一个集合复制到另一个集合?

Django admin 内联自定义查询集