from django.shortcuts import render, redirect from django.http import HttpResponse from .models import ArticlePost from .form import ArticlePostForm from django.contrib.auth.models import User import markdown # 视图函数 def article_list(request): articles = ArticlePost.objects.all() context = {'articles': articles} return render(request, 'article/list.html', context) def article_detail(request, id): articles = ArticlePost.objects.get(id=id) articles.body = markdown.markdown(articles.body, extensions=[ 'markdown.extensions.extra', 'markdown.extensions.codehilite', ]) context = {'article': articles} return render(request, 'article/detail.html', context) def article_create(request): if request.method == 'POST': article_post_form = ArticlePostForm(data=request.POST) # 判断提交的数据是否满足模型要求 if article_post_form.is_valid(): # 保存数据,但是暂时不提交到数据库中 new_article = article_post_form.save(commit=False) new_article.author = User.objects.get(id=1) # 将新文章保存到数据库中 new_article.save() return redirect("article:article_list") # 如果数据不合法,返回错误信息 else: return HttpResponse("表单有错误,请重新填写") # 如果用户请求获取数据 else: # 创建表单类实例 article_post_form = ArticlePostForm() context = {'article_post_form': article_post_form} # 返回模板 return render(request, 'article/create.html', context) def article_delete(request, id): article = ArticlePost.objects.get(id=id) article.delete() return redirect("article:article_list") def article_safe_delete(request, id): if request.method == 'POST': article = ArticlePost.objects.get(id=id) article.delete() return redirect("article:article_list") else: return HttpResponse("仅允许POST请求") def article_update(request, id): article = ArticlePost.objects.get(id=id) if request.method == 'POST': article_post_form = ArticlePostForm(data=request.POST) if article_post_form.is_valid(): article.title = request.POST['title'] article.body = request.POST['body'] article.save() return redirect("article:article_detail", id=id) else: return HttpResponse("表单内容有误,请重新填写") else: article_post_form = ArticlePostForm() context = {'article': article, 'article_post_form': article_post_form} return render(request, 'article/update.html', context)