0

我正在开发一个用于创建/编辑 Django 模型的工具,请参阅https://github.com/timothyclemans/django-admin-models-editor

解析 Python 代码的推荐方法是什么?我需要做一堆正则表达式并做很多 if thens 吗?

下面的代码获取模型名称和字段名称。

code_from_input = request.POST['code'].split('\n')[0]
def_lines = ''
if '    def' in request.POST['code']:
    for i, line in enumerate(request.POST['code'].split('\n')):
        if line.startswith('    def'):
            def_lines = '\n'.join(request.POST['code'].split('\n')[i:])
            break
last_code_from_input = request.POST['last_code'].split('\n')[0]
# check if model name in source changed
model_name_in_last_source = ''
model_name_in_code = ''
if last_code_from_input.startswith('class'):
    m = re.match(r"class (\w+)\(models.Model\):", last_code_from_input)
    try:
        model_name_in_last_source = m.group(1)
    except:
        pass
if code_from_input.startswith('class'):
    m = re.match(r"class (\w+)\(models.Model\):", code_from_input)
    try:
        model_name_in_code = m.group(1)
    except:
        pass
if model_name_in_last_source != model_name_in_code:
    model_name = model_name_in_code
else:
    model_name = request.POST['name']

django admin 模型编辑器

4

1 回答 1

2

对于非常简单的用例,您可以使用正则表达式。如果您只想在源代码中找到类,您的方法可能没问题。

或者,查看检查模块,但这只能与导入的 python 模块一起使用,而不是源文件。您可以枚举模块中的类,提取方法名称、源代码和文档。这可能是您想要的最佳方法。

http://docs.python.org/library/inspect.html

如果您真的深入研究源代码,您可能会尝试 ast 模块。它提供了一个解析函数,该函数接受一个 python 源字符串并返回一个抽象语法树。这是最复杂的库,但也是最强大的。

有关详细信息,请参阅:http ://docs.python.org/library/ast.html。

于 2012-09-10T10:14:36.937 回答