如何编辑&从Django的前端保存内容?

时间:2015-06-15 16:38:50

标签: python django django-forms django-views

我正在使用Django 1.8构建一个新的Web应用程序。该应用程序有一个简单的模型,它获取一个名称和一个网址。然后在视图中我有一个函数读取给定url的内容,然后使用BeautifulSoup包从它中删除一些数据,并将它们分配给此函数中的局部变量(文章名称,发布日期等)。然后我在模板中显示这些变量。

现在我想添加新功能,允许登录用户编辑这些内容。我发现了一些第三方软件包可以做到这一点,但由于这是一个教育项目,我更喜欢理解这样做的逻辑。

所以问题是如何让登录用户操作从视图中的函数(而不是模型字段)捕获的数据并将编辑后的数据保存到数据库中(不使用管理区域)?显然我不想要任何代码,我想知道执行此任务的实现思路。

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})

2 个答案:

答案 0 :(得分:2)

我发现最简单的方法就是如何将数据存储在数据库中。从文章模型开始:

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

如果给出url,我们希望标题和html被填充。写一个信号接收器来处理刮擦:

@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

注意:代码需要一些工作。您还需要编写导入,网址和模板。

最后:第三方应用程序没有任何问题。我不拥有Python,Django,Requests,Beautiful Soup等等......即使这是一个学习项目,也不要重新发明轮子。尽可能地懒惰。使用能够为您完成工作的工具。

答案 1 :(得分:0)

  1. 找到像froala一样的wysiwyg编辑器,修改字段
  2. 使用ajax更新。
  3. 检查服务器端的权限。