일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- hackerrank
- Delphi
- dbadvgrid
- python3
- templates
- pyhcarm
- anaconda3
- get_object_or_404
- Django
- PyCharm
- 델파이
- c#
- COMMIT
- MSSQL
- declare
- delphi 10.3
- GIT
- 백준
- rank
- advColumnGrid
- blog
- queryset
- github
- HTML
- Push
- 중복제거
- TMS
- Visual Studio
- python 3.7
- pythonanywhere
- Today
- Total
DevHyun
[DevHyun's Blog] Django&Python으로 만든 Blog 개선하기! 본문
[DevHyun's Blog] Django&Python으로 만든 Blog 개선하기!
D3V3L0P3R 2020. 10. 27. 19:36d3v3lop3r.tistory.com/category/Web/Django%26Python%20Blog%20Projecct
장고걸스 코치들과 자원봉사자들의 수고로 번역된 글을 참고하였습니다.
지금까지 Django&Python으로 만든 Blog를 개선해보고자 합니다!
- 미리 보기로 블로그 글 저장하기(임시저장)
- 게시되지 않은 블로그 글 목록 페이지 만들기
- 게시 버튼 추가하기
- 블로그 글 삭제하기
- 로그인 페이지 만들기 전 모든 권한 주기
- 미리 보기로 블로그 글 저장하기(임시저장)
- 게시되지 않은 블로그 글 목록 페이지 만들기
1. Blog/views.py에서 post_new 메소드와 post_edit 메소드에서 post.published_date = timezone.now() 부분 삭제
* Blog/views.py
* 새로 작성한 글이 바로 게시되지 않고 미리 볼 수 있는 초안으로 저장이 됩니다.
...
..
.
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
# post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'Blog/post_edit.html', {'form': form})
def post_edit(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.method == "POST":
form = PostForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
# post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm(instance=post)
return render(request, 'Blog/post_edit.html', {'form': form})
def admin(request): return HttpResponse(admin)
2. base.html 에서 edit 버튼 추가
* Blog/templates/Blog/base.html
<!DOCTYPE html>
{% load static %}
<html>
...
..
.
<body>
<div class ="page-header">
...
..
.
<a href="{% url 'post_draft_list' %}" class="top-menu"><span class="glyphicon glyphicon-edit"></span></a>
<h1><a href="{% url 'post_list' %}">DevHyun's Blog</a></h1>
</div>
...
..
.
</body>
</html>
3. urls.py에서 post_draft_list 추가
* Blog/urls.py
...
..
.
urlpatterns = [
...
..
.
path('post/draft', views.post_draft_list, name='post_draft_list'),
]
∨∨ url 매핑 관련 참고 사이트∨∨
pythonstudy.xyz/python/article/311-URL-%EB%A7%A4%ED%95%91
4. views.py에 post_drfat_list View 생성
* Blog/views.py
...
..
.
def post_draft_list(request):
posts = Post.objects.filter(published_date__isnull=True).order_by('created_date')
return render(request, 'Blog/post_draft_list.html', {'posts': posts})
5. post_draft_list.html 생성
* Blog/templates/Blog/post_draft_list.html
{% extends 'Blog/base.html' %}
{% block content %}
{% for post in posts %}
<div class="post">
<p class="date">created: {{ post.created_date|date:'d-m-Y' }}</p>
<h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1>
<p>{{ post.text|truncatechars:200 }}</p>
</div>
{% endfor %}
{% endblock %}
- 게시버튼 생성하기
6. post_detail.html 에서 게시버튼 추가하기
* Blog/templates/Blog/post_detail_list.html
{% if post.published_date %}
<div class="date">
{{ post.published_date }}
</div>
{% else %}
<a class="btn btn-default" href="{% url 'post_publish' pk=post.pk %}">Publish</a>
{% endif %}
* published_date 값이 비어있다면 버튼 보여주기!
7. urls.py에서 publish와 관련된 url패턴 추가하기
* Blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
...
..
.
path('post/<int:pk>/publish/', views.post_publish, name='post_publish'),
]
8. views.py에서 post_publish view 추가하기
* Blog/views.py
...
..
.
def post_publish(request, pk):
post = get_object_or_404(Post, pk=pk)
post.publish()
return redirect('post_detail', pk=pk)
- 게시글 삭제버튼 생성하기
9. post_detail.html에서 수정버튼 아래에 삭제버튼 추가하기
* Blog/templates/Blog/post_detail.html
{% extends 'Blog/base.html' %}
{% block content %}
<div class="post">
...
..
.
<a class="btn btn-default" href="{% url 'post_edit' pk=post.pk %}"><span class="glyphicon glyphicon-pencil"></span></a>
<a class="btn btn-default" href="{% url 'post_remove' pk=post.pk %}"><span class="glyphicon glyphicon-remove"></span></a>
<h1>{{ post.title }}</h1>
<p>{{ post.text|linebreaksbr }}</p>
</div>
{% endblock %}
10. urls.py에 url 패턴(remove) 추가하기
* Blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
...
..
.
path('post/<int:pk>/remove/', views.post_remove, name='post_remove'),
]
11. views.py에서 remove view 추가하기
* Blog/view.py
...
..
.
def post_remove(request, pk):
post = get_object_or_404(Post, pk=pk)
post.delete()
return redirect('post_list')
- 로그인 페이지 만들기 전 모든 권한 주기
12. views.py에서 get_user_model import 후 author를 admin(superuser)로 지정하기
* Blog/views.py
...
..
.
from django.contrib.auth import get_user_model
def post_new(request):
post.author = get_user_model().objects.get(username='admin')
...
..
.
def post_edit(request, pk):
post.author = get_user_model().objects.get(username='admin')
...
..
.
13. base.html에서 버튼을 다 보이게 만들기 (if문 제거)
* Blog/templates/Blog/base.html
<!DOCTYPE html>
{% load static %}
<html>
...
..
.
<body>
<div class ="page-header">
<a href="{% url 'post_new' %}" class="top-menu"><span class="glyphicon glyphicon-plus"></span></a>
<a href="{% url 'post_draft_list' %}" class="top-menu"><span class="glyphicon glyphicon-edit"></span></a>
<h1><a href="{% url 'post_list' %}">DevHyun's Blog</a></h1>
</div>
...
..
.
</body>
</html>
14. run-> pythonanywhere에 재배포
'Web > Django&Python Blog Projecct' 카테고리의 다른 글
[DevHyun's Blog] 사용 SQL을 sqlite3(local)에서 가상database(mysql)로 변경해보자! (0) | 2020.10.30 |
---|---|
[DevHyun's Blog] Django&Python으로 만든 Blog에 로그인한 사용자만 글쓰게 만들기! (0) | 2020.10.21 |
[DevHyun's Blog] Django Form 만들기(일반 사용자가 Post 수정 가능하게 만들기) (0) | 2020.10.21 |
[DevHyun's Blog] Django Form 만들기(일반 사용자가 Post 추가 가능하게 만들기) (0) | 2020.10.21 |
[DevHyun's Blog] Django&Python으로 만든 Blog App 확장(extending)하기 (0) | 2020.10.19 |