CBV(Class Based View)
- django의 parent class 기능을 사용
- Overriding으로 기능 수정
- 기본 template name 지정되어 있음
templat_name: template 이름 변경
<class>/as_view(): urls에서 view 지정from django.views.generic import ListView, CreateView, DeleteView, UpdateView, ...
ListView
- 블로그 전체 리스트 클래스
ordering: order by- html
post_list: 전체 post 리스트
# blog\templates\blog\post_list.html
<!-- content -->
{% block content %}
<!-- content -->
{% for post in post_list %}
<!-- Featured blog post-->
<div class="card mb-4">
{% if post.uploaded_image %}
<a href="{{ post.get_absolute_url }}"><img class="card-img-top" src={{ post.uploaded_image.url }} alt="..." /></a>
{% else %}
<a href="{{ post.get_absolute_url }}"><img class="card-img-top" src={% static "blog/images/image.png" %} alt="..." /></a>
{% endif %}
...
class PostListView(ListView):
model = Post
ordering = "-pk"
DetailView
post_detail.html: defalt template- html
post: detail post
# blog\templates\blog\post_detail.html
...
{% if user.is_authenticated and comment.author == user %}
<div class="col-lg-2">
<a href='/blog/{{ post.pk }}/comment_update/{{ comment.id }}' class="mb-4">
<input type='submit' value='수정' class="btn btn-primary"></input>
</a>
</div>
<div class="col-lg-1">
<a href='/blog/{{ post.pk }}/comment_delete/{{ comment.id }}' class="mb-4">
<input type='submit' value='삭제' class="btn btn-primary"></input>
</a>
</div>
{% endif %}
...
CreateView
fields: form.py의 fields 작성, 즉 Query의 속성 값 지정self.request: requestform_valid(self, form): form형식 검사(postform.is_valid)- 검사 자동 실행, instance를 인자로 받아옴
form:temp_post = postform.save(commit=False)에 해당
LoginRequiredMixin: 로그인했음?- http
form: postform
# blog\views_class.py
...
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
fields = ['title', 'category', 'content', 'uploaded_image', 'uploaded_file']
# post_form.html
def form_valid(self, form):
current_user = self.request.user
if current_user.is_authenticated:
form.instance.author = current_user
return super(PostCreateView, self).form_valid(form)
else:
return redirect('post_list')
...
# blog\templates\blog\post_form.html
<!-- content -->
{% block content %}
<form action='' method='post', enctype='multipart/form-data'>
{% csrf_token %}
{{ form }}
<input type='submit'>
</form>
{% endblock %}
DeleteView
post_confirm_delete.html: default templatesuccess_url: 삭제 후 redirect urlUserPassesTestMixin: 작성자임?
class PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
model = Post
# success_url = '../../'
success_url = '/blog/'
# template_name = 'blog/post_detail.html'
C
Contents
