Разбиение приложения на части происходит с помощью чертежей — Blueprints.
Прочитать про них подробнее можно здесь .
В этой статье — руководство к действию
Предпосылки
У вас есть основной файл __init__.py или app.py в котором вы уже создали приложение Flask
Допустим, у вас есть группа url вида
и группа url вида
Те url, которые начинаются на second вы хотите выделить в отдельное подприложение, или просто хотите разбить главный файл на части, чтобы было проще искать нужный код.
Нужно будет сделать несколько действий, первое из которых — создание нового .py файла
Новый файл
Создайте рядом с главным файлом новый файл second.py
Импортируйте туда всё, что было нужно для работы + functools
Из flask обязательно импортируйте Blueprint это ключевой модуль для данной операции.
import functools from flask import ( Blueprint, flash, g, redirect, render_template, request, session, url_for ) from werkzeug.security import check_password_hash, generate_password_hash
Прекрати писать код в ОДНОМ файле Python | ТОП 5 Ошибок и создание правильной архитектуры
После импорта добавьте строку
bp = Blueprint(‘api’, __name__, url_prefix=’/second’)
url_prefix=’/second’ означает, что все url в этом подприложении будут начинаться с second
Файл second.py готов
Регистрация нового чертежа
Теперь в главном файле, скорее всего он называется __init__.py удалите перемещённые url
И зарегистрируйте новое подприложение прописав его чертёж
from . import second app.register_blueprint(second.bp)
url_for
Вы, скорее всего, пользовались url_for и в оригинальном файле это выглядело примерно так:
То теперь нужно заменить / на .
Шаблоны для порядка тоже имеет смысл переложить в отдельную папку templates/
open_resource
Если раньше вы писали with app.open_resource теперь нужно писать with bp.open_resource
def load_db(): with bp.open_resource(‘file.json’) as f: return json.load(f)
Источник: www.andreyolegovich.ru
разделить исходный код Python на несколько файлов?
У меня есть код, который я хочу разделить на несколько файлов. В Matlab можно просто вызвать файл .m , и до тех пор, пока он не определен как что-либо в частности, он просто запустится так, как если бы он был частью вызываемого кода. Пример (отредактированный):
test.m (matlab)
function [] = test() . some code using variables . test2
test2.m (matlab)
. some more code using same variables .
Вызов test запускает код в тесте, а также код в test2. Есть ли аналогичный способ для python поместить . some more code . во внешний файл, который будет просто читаться так, как если бы он находился в файле, из которого он вызван?
Markus 13 сен. 2012, в 21:12
Поделиться
Borgleader 13 сен. 2012, в 18:34
Прочитайте ваш любимый учебник по Python и узнайте о модулях
Andreas Jung 13 сен. 2012, в 18:35
Разбиваем проект на файлы
Поделиться:
4 ответа
Лучший ответ
Я изучаю использование модуля в python только сейчас и думал, что отвечу на вопрос, который Маркус просит в комментариях выше ( «Как импортировать переменные, когда они встроены в модули?» ) с двух сторон:
- переменная/функция и
- свойство/метод класса.
Вот как я переписал основную программу f1.py, чтобы продемонстрировать повторное использование переменной для Markus:
import f2 myStorage = f2.useMyVars(0) # initialze class and properties for i in range(0,10): print «Hello, » f2.print_world() myStorage.setMyVar(i) f2.inc_gMyVar() print «Display class property myVar:», myStorage.getMyVar() print «Display global variable gMyVar:», f2.get_gMyVar()
Вот как я могу переписать повторно используемый модуль f2.py:
# Module: f2.py # Example 1: functions to store and retrieve global variables gMyVar = 0 def print_world(): print «World!» def get_gMyVar(): return gMyVar # no need for global statement def inc_gMyVar(): global gMyVar gMyVar += 1 # Example 2: class methods to store and retrieve properties class useMyVars(object): def __init__(self, myVar): self.myVar = myVar def getMyVar(self): return self.myVar def setMyVar(self, myVar): self.myVar = myVar def print_helloWorld(self): print «Hello, World!»
Когда выполняется f1.py, это будет выглядеть так:
%run «f1.py» Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! Hello, World!
Hello, World! Hello, World! Hello, World! Hello, World! Display class property myVar: 9 Display global variable gMyVar: 10
Я думаю, что точка Маркуса была бы следующей:
- Чтобы повторно использовать код модуля более одного раза, введите код модуля в функций или классов,
- Чтобы повторно использовать переменные, хранящиеся как свойства в модулях, инициализируйте свойства внутри класса и добавить методы «getter» и «setter», чтобы переменные не обязательно должны быть скопированы в основную программу,
- Чтобы повторно использовать переменные, хранящиеся в модулях, инициализируйте переменные и используйте функции геттера и сеттера. Функции сеттера объявили бы переменные как глобальные.
Источник: overcoder.net
Python-сообщество
- Начало
- » Python для новичков
- » Разделить программу на несколько файлов
#1 Окт. 25, 2018 12:19:03
Разделить программу на несколько файлов
Добрый день.
Подскажите пожалуйста как разбить программу на несколько файлов.
import test2 test()
Файл test2.py
def test(): print(‘ok’)
name ‘test’ is not defined
Отредактировано Ubhra (Окт. 25, 2018 14:58:32)
#2 Окт. 25, 2018 14:03:03
Разделить программу на несколько файлов
Ubhra
Подскажите пожалуйста как разбить программу на несколько файлов.
а откуда функция create_config() в файле test1.py? ошибка name ‘test’ is not defined вообще не понятна откуда взялась. у меня ваш код выдал NameError: name ‘create_config’ is not defined что и должно быть о чем написал в начале поста.
Файл test1.py
import test2 create_config = test2.test create_config()
#3 Окт. 25, 2018 14:58:46
Разделить программу на несколько файлов
#4 Окт. 25, 2018 17:09:25
Разделить программу на несколько файлов
Я так полагаю, тут разные пространства имен.
#5 Окт. 25, 2018 19:00:20
Разделить программу на несколько файлов
test1.py
package
__init__.py
test2.py
from package import * test()
Файл __init__.py
import test2.py
Файл test1.py
def test(): print(‘ok’)
No module named ‘test2’
#6 Окт. 26, 2018 01:41:40
Разделить программу на несколько файлов
слушайте, ну не мучайте себя и других, ну сходите почитайте учебник,книгу по питону. Ну основы основ… милион раз описаны. А вы тут методом тыка пытаетесь познать истину, там где этого не надо
_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com
Источник: python.su