2015-06-15 2 views
1

Я использую Django 1.8 для создания нового веб-приложения. Приложение имеет простую модель, которая получает имя и URL-адрес. Затем в представлениях у меня есть функция, которая считывает содержимое данного URL-адреса, затем сбрасывает некоторые данные из него с помощью пакета BeautifulSoup и назначает их в локальные переменные (название статьи, опубликованная дата и т. Д.) В этой функции. Затем я показываю эти переменные в шаблонах.Как редактировать и сохранять содержимое из интерфейса в Django?

Теперь я хочу добавить новую функцию, которая позволяет зарегистрированным пользователям редактировать это содержимое. Я нашел несколько сторонних пакетов, которые это делают, но поскольку это образовательный проект, я предпочитаю понимать логику этого.

Итак, вопрос заключается в том, как разрешить входным пользователям управлять манипулированием данными, полученными из функции, в представлениях (а не в поле модели) и сохранять отредактированные данные в базе данных (без использования области администратора)? Очевидно, что я не хочу никаких кодов, я хочу знать идею реализации для выполнения этой задачи.

views.py

def detail(request, article_id): 
    article = get_object_or_404(Article, pk=article_id) 

    html = article.article_url 
    read = requests.get(html) 
    soup = BeautifulSoup(html) 
    title = soup.title.string 

    return render(request, 'detail.html', {'article': article, 'title':title}) 
+0

Когда вы говорите «отредактируйте это содержимое», вы говорите об изменении необработанного HTML или в способе WYSIWYG? – Brandon

+0

Я имею в виду raw html, потому что поля похожи на обычный текст в формате (статья: название статьи) sth. так же, как мы можем редактировать комментарии здесь при переполнении стека. – sheshkovsky

+1

Легко. Просто создайте форму и представление для обновления содержимого. – Brandon

ответ

0
  1. найти WYSIWYG редактор, например froala, изменение полю
  2. обновления с помощью AJAX.
  3. проверить разрешения на стороне сервера.
+0

Я просил не третьих лиц. – sheshkovsky

1

Мне легче всего начать с того, как данные должны храниться в db. Начнем с модели статьи:

def Article(models.Model): 
    url = models.UrlField() 
    title = models.CharField(max_length=200, blank=True) 
    html = models.TextField(blank=True) 

Чем мы хотим, чтобы заголовок и HTML быть заполнено, если URL дается. Напишите приемник сигналов для обработки соскабливания:

@receiver(pre_save, instance, sender=Article) 
def scrape(sender, **kwargs): 
    if instance.url and not instance.title and not instance.html: 
     data = requests.get(instance.url) 
     instance.html = BeautifulSoup(data) 
     instance.title = instance.html.title.name 

Если вы добавите администратора, все готово. Но также легко создавать виды для отображения и обновления данных:

class ArticleDetailView(DetailView): 
    model = Article 

class ArticleUpdate(UpdateView): 
    model = Article 

Примечание: код нуждается в некоторой работе. Вам также необходимо написать импорт, URL-адреса и шаблоны.

И наконец: нет ничего плохого в сторонних приложениях. Я не владею Python, Django, Requests, Beautiful Soup и т. Д. Даже если это учебный проект, это хорошая вещь, чтобы НЕ изобретать колесо. Будьте максимально ленивы. Используйте инструменты, которые выполняют эту работу для вас.

Смежные вопросы