Доброго времени. У меня есть несколько вьюх в которых постоянно обрабатывается одно и то же. Вот пример:
def edit(request, req_user):
template = 'edit_user.html'
template_error = 'error.html'
read_only_status = True
# Read config file
try:
config = settings.CONFIG_FILES
conf = read_config.Conf(config)
except AttributeError:
return render(
request, template_error, {'type_error': 'ConfigMFTPNotDefine'})
except (read_config.MFTPConfigNotFound,
read_config.MFTPConfigIncorrect) as err:
return render(request, template_error, {'type_error': err.__name__})
# Search user
try:
user_info = rw_pwd_file.RWPwdFile(conf.pwd_file)
search_result = user_info.get_user(req_user)
except (rw_pwd_file.MFTPPwdFileNotFound,
rw_pwd_file.MFTPPwdFilePermissionDenied) as err:
return render(request, template_error, {
'type_error': err.__name__, 'pwd_file': conf.pwd_file})
except rw_pwd_file.MFTPUserNotFound as err:
return render(request, template_error, {
'type_error': err.__name__, 'user': req_user})
# Update user info, add directory.
dir_search.search(conf.local_root, search_result)
if check_access.file(conf.pwd_file, 'w'):
if check_access.file(conf.local_root, 'w'):
read_only_status = False
return render(request, template, {
'read_only_status': read_only_status, 'search_result': search_result,
'req_user': req_user, 'user_status': search_result[req_user]['status']})
Всю основную работу я вынес в модули (read_config, rw_pwd_file, dir_search, ...). Тут все просто. Идет простая проверка есть ли файл или есть ли доступ. Ну и если нет, то выскакивает ошибка (raise). Ошибки я обрабатываю на одном шаблоне, где через if выдается нужное сообщение.
Я хотел по максимум разделить то, что длается сервером и то, что показывается пользователю. И вроде пока получалось. В шаблонах можно делать что нужна получаю только тип ошибки.. Никаких жестких сообщений (типа: str = 'Config %s not not found' % config) со стороны сервера не определено. Короче. Таких вьюх порядка 4. И везде идет проверка одного и того же. Я пытался сделать отдельную функцию для, например, чтения главного конфига. Но если происходит ошибка в этой функции ошибка возвращается во вьюху. Ну а далее по коду выскакивает что-то типа AttributeError.
Вот как вызвать return для пользователя именно в этой функции, без возврата во вьюху, чтоб не писат там опять проверки??