Ошибка - ошибка подключения к серверу. Убедитесь, что вы правильно запустили свой сервер.
manage.py runserver 0.0.0.0:8000
, здесь 8000 - номер порта. Для более сложной установки конфигурации я использовал бы раздел пользовательской конфигурации, который ясно определяет роли каждого раздела, например,
<appMonitoring enabled="true" smtpServer="xxx">
<alertRecipients>
<add name="me" email="me@me.com"/>
</alertRecipient>
</appMonitoring>
В Вашем классе конфигурации можно выставить свойства с чем-то как
public class MonitoringConfig : ConfigurationSection
{
[ConfigurationProperty("smtp", IsRequired = true)]
public string Smtp
{
get { return this["smtp"] as string; }
}
public static MonitoringConfig GetConfig()
{
return ConfigurationManager.GetSection("appMonitoring") as MonitoringConfig
}
}
Можно затем получить доступ к свойствам конфигурации следующим образом из кода
string smtp = MonitoringConfig.GetConfig().Smtp;
Не будет никакого измеримого различия в терминах эффективности.
AppSettings является большим, если все, в чем Вы нуждаетесь, является парами имя/значение.
Для чего-либо более сложного стоит создать раздел пользовательской конфигурации.
Для примера Вы упоминаете, я использовал бы appSettings.
Не будет никакой разницы в производительности, начиная с ConfigurationManager. AppSettings просто называет GetSection ("appSettings") так или иначе. Если необходимо будет перечислить все ключи, то пользовательский раздел будет более хорошим, чем перечисление всех appSettings и поиска некоторого префикса на ключах, но иначе легче придерживаться appSettings, если Вам не нужно что-то более сложное, чем NameValueCollection.