|
@@ -3,27 +3,56 @@ from django.http import HttpResponse
|
|
|
from .models import ArticlePost
|
|
from .models import ArticlePost
|
|
|
from .form import ArticlePostForm
|
|
from .form import ArticlePostForm
|
|
|
from django.contrib.auth.models import User
|
|
from django.contrib.auth.models import User
|
|
|
|
|
+from django.contrib.auth.decorators import login_required
|
|
|
|
|
+from django.core.paginator import Paginator
|
|
|
|
|
+from django.db.models import Q
|
|
|
import markdown
|
|
import markdown
|
|
|
|
|
|
|
|
|
|
|
|
|
# 视图函数
|
|
# 视图函数
|
|
|
def article_list(request):
|
|
def article_list(request):
|
|
|
- articles = ArticlePost.objects.all()
|
|
|
|
|
- context = {'articles': articles}
|
|
|
|
|
|
|
+ search = request.GET.get('search')
|
|
|
|
|
+ order = request.GET.get('order')
|
|
|
|
|
+ if search:
|
|
|
|
|
+ if order == 'total_views':
|
|
|
|
|
+ article_list = ArticlePost.objects.filter(
|
|
|
|
|
+ Q(title__icontains=search) |
|
|
|
|
|
+ Q(body__icontains=search)
|
|
|
|
|
+ ).order_by('-total_views')
|
|
|
|
|
+ else:
|
|
|
|
|
+ article_list = ArticlePost.objects.filter(
|
|
|
|
|
+ Q(title__icontains=search) |
|
|
|
|
|
+ Q(body__icontains=search)
|
|
|
|
|
+ )
|
|
|
|
|
+ else:
|
|
|
|
|
+ search = ''
|
|
|
|
|
+ if order == 'total_views':
|
|
|
|
|
+ article_list = ArticlePost.objects.all().order_by('total_views')
|
|
|
|
|
+ else:
|
|
|
|
|
+ article_list = ArticlePost.objects.all()
|
|
|
|
|
+ paginator = Paginator(article_list, 3)
|
|
|
|
|
+ page = request.GET.get('page')
|
|
|
|
|
+ articles = paginator.get_page(page)
|
|
|
|
|
+ context = {'articles': articles, 'order': order, 'search': search}
|
|
|
return render(request, 'article/list.html', context)
|
|
return render(request, 'article/list.html', context)
|
|
|
|
|
|
|
|
|
|
|
|
|
def article_detail(request, id):
|
|
def article_detail(request, id):
|
|
|
articles = ArticlePost.objects.get(id=id)
|
|
articles = ArticlePost.objects.get(id=id)
|
|
|
- articles.body = markdown.markdown(articles.body,
|
|
|
|
|
- extensions=[
|
|
|
|
|
- 'markdown.extensions.extra',
|
|
|
|
|
- 'markdown.extensions.codehilite',
|
|
|
|
|
- ])
|
|
|
|
|
- context = {'article': articles}
|
|
|
|
|
|
|
+ articles.total_views += 1
|
|
|
|
|
+ articles.save(update_fields=['total_views'])
|
|
|
|
|
+ md = markdown.Markdown(
|
|
|
|
|
+ extensions=[
|
|
|
|
|
+ 'markdown.extensions.extra',
|
|
|
|
|
+ 'markdown.extensions.codehilite',
|
|
|
|
|
+ 'markdown.extensions.toc'
|
|
|
|
|
+ ])
|
|
|
|
|
+ articles.body = md.convert(articles.body)
|
|
|
|
|
+ context = {'article': articles, 'toc': md.toc}
|
|
|
return render(request, 'article/detail.html', context)
|
|
return render(request, 'article/detail.html', context)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+@login_required(login_url='/user/login/')
|
|
|
def article_create(request):
|
|
def article_create(request):
|
|
|
if request.method == 'POST':
|
|
if request.method == 'POST':
|
|
|
article_post_form = ArticlePostForm(data=request.POST)
|
|
article_post_form = ArticlePostForm(data=request.POST)
|
|
@@ -31,7 +60,7 @@ def article_create(request):
|
|
|
if article_post_form.is_valid():
|
|
if article_post_form.is_valid():
|
|
|
# 保存数据,但是暂时不提交到数据库中
|
|
# 保存数据,但是暂时不提交到数据库中
|
|
|
new_article = article_post_form.save(commit=False)
|
|
new_article = article_post_form.save(commit=False)
|
|
|
- new_article.author = User.objects.get(id=1)
|
|
|
|
|
|
|
+ new_article.author = User.objects.get(id=request.user.id)
|
|
|
# 将新文章保存到数据库中
|
|
# 将新文章保存到数据库中
|
|
|
new_article.save()
|
|
new_article.save()
|
|
|
return redirect("article:article_list")
|
|
return redirect("article:article_list")
|
|
@@ -53,27 +82,35 @@ def article_delete(request, id):
|
|
|
return redirect("article:article_list")
|
|
return redirect("article:article_list")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+@login_required(login_url='/user/login/')
|
|
|
def article_safe_delete(request, id):
|
|
def article_safe_delete(request, id):
|
|
|
if request.method == 'POST':
|
|
if request.method == 'POST':
|
|
|
article = ArticlePost.objects.get(id=id)
|
|
article = ArticlePost.objects.get(id=id)
|
|
|
- article.delete()
|
|
|
|
|
- return redirect("article:article_list")
|
|
|
|
|
|
|
+ if article.author == User.objects.get(id=request.user.id):
|
|
|
|
|
+ article.delete()
|
|
|
|
|
+ return redirect("article:article_list")
|
|
|
|
|
+ else:
|
|
|
|
|
+ return HttpResponse("你无权限进行此操作")
|
|
|
else:
|
|
else:
|
|
|
return HttpResponse("仅允许POST请求")
|
|
return HttpResponse("仅允许POST请求")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+@login_required(login_url='/user/login/')
|
|
|
def article_update(request, id):
|
|
def article_update(request, id):
|
|
|
article = ArticlePost.objects.get(id=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)
|
|
|
|
|
|
|
+ if article.author == User.objects.get(id=request.user.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:
|
|
else:
|
|
|
- return HttpResponse("表单内容有误,请重新填写")
|
|
|
|
|
|
|
+ article_post_form = ArticlePostForm()
|
|
|
|
|
+ context = {'article': article, 'article_post_form': article_post_form}
|
|
|
|
|
+ return render(request, 'article/update.html', context)
|
|
|
else:
|
|
else:
|
|
|
- article_post_form = ArticlePostForm()
|
|
|
|
|
- context = {'article': article, 'article_post_form': article_post_form}
|
|
|
|
|
- return render(request, 'article/update.html', context)
|
|
|
|
|
|
|
+ return HttpResponse("你无权进行此操作")
|