31강. Profileapp 구현 시작
views.py에
class ProfileCreateView(CreateView):
model = Profile (profile설정)
context_object_name = 'target_profile'
form_class = ProfileCreationForm
success_url = reverse_lazy('accountapp:hello_world')
template_name = 'profileapp/create.html'
url 설정
urlpatterns = [
path('create/', ProfileCreateView.as_view(), name='create'),
]
accountapp create.html에서 profile변경후 복붙
accountapp detail.html
{% if target_user.profile %}
:
profile.nickname
{% else %}
<a href="{% url 'profileapp:create' %}">
<h2 style="font-family: 'NanumSquareB'">
Create Profile
</h2>
</a>
{% endif %}
create.html에
enctype="multipart/form-data"> 명시
views.py에
def form_valid(self, form):
temp_profile = form.save(commit=False)
temp_profile.user = self.request.user
temp_profile.save()
return super().form_valid(form)
32강. Profileapp 마무리
views.py에서 updateview만들기
class ProfileUpdateView(UpdateView):
:
template_name = 'profileapp/update.html'
profile/urls.py에서 url 만들기
path('update/<int:pk>', ProfileUpdateView.as_view(), name='update'),
html 파일은 accountapp복붙
update profile
profileapp target_profile enctype="multipart/form-data” 로 변경
accountapp/templates/accountapp/detail.html에서
<img src="{{ target_user.profile.image.url }}" alt="" style="height: 12rem; width: 12rem; border-radius: 20rem; margin-bottom: 2rem;">
:
<a href="{% url 'profileapp:update' pk=target_user.profile.pk %}">
edit
</a>
pragmatic/urls.p에서
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
(가져오기 ..conf.urls...)(가져오기conf.settings)
decorator도 복붙 profileapp/decorators.py
profile_
profile = Profile.(가져옴)
profil.user
profileapp/views.py에서
@method_decorator(profile_ownership_required, 'get')
@method_decorator(profile_ownership_required, 'post')
33강get_success_url 함수 그리고 리팩토링
views.py에서 create,update에 둘다 적용
success_url삭제
def get_success_url(self):
return reverse('accountapp:detail', kwargs={'pk': self.object.user.pk})
accountpp/detail.html 에서
img, h5위치 if 밑으로 변경 ,
{% if target_user == user %}
{% endif %}
<h2>
닉네임 미설정
</h2>
34강MagicGrid 소개 및 Articleapp 시작
pragmatic/settings.py
‘articleapp’,
urls.py에도 만들어줌
articleapp에 urls.py만들어줌
path(’list/’, TtemplateView.as_view)
(가져옴)
templates만들고 articleapp내부폴더만들고 list.html만듬
~~
static에서 js만들고 안에 magicgrid.js 만듬
~~
list.html에 높이 삭제, ~~
<img~~
.container img{ ~~~
magicgrid.js에
var masonrys = document.getElementsByTagName(”img”);
for (let i = 0; i < masonrys.length; i++) {
masonrys[i].addEventListener(’load’, function () {
magicGrid.positionItems();
}, flase);
}
list.html에서 복붙
35강 Articleapp 구현
오류수정: articeapp/models.py에서 auto_created→auto_now_add로 변경
1.모델만들기 models.py
class article(models.Model):
writer = models. ForeignKey(User, on_delete=models.SET_NULL, related_name=’article’, null=True)
(가져오기)
title = models.CharField(max_length=200, null=True)
image = models.ImageField(upload_to=’article/’, null=False)
content = models.TextField(null=True)
created_at = models.DateField(auto_created=True, null=True)
forms.py만듬
// migrate
views.py에서 ~~
accountapp crate,detail.html을 articleapp에 복붙추가,
변경사항 변경
templates/header.html에서~
articleapp/list.html에서~
templates/urls.html에서 ~~
list.html에서 중앙~~
views.py에서 updateview~
articleapp에 accountapp의 decorators 복붙 article로 변경~
views.py에~
detail.html에~
urls.py에 update추가~
accountapp에 create.html 복붙 update.html만들고 변경
views.py에 ~~
accountapp delete.html복붙하고 변경~
detail.html에서 ~
urls.py에서 deleteurl설정 ~
views.py에서 success_url~
36강 ListView, Pagination 소개 및 적용
articleapp/views.py에~
urls.py에~
list.html에~
templates→new directory→snippets만들고 안에 card.html만들고 ~~
list.html에~
snippets에 pagination.html만들고~
articleapp/detail.html에서 스타일변경~
37강 Mixin 소개 및
Commentapp 구현
terminal에~
pragmatic/settings.py에 ~
urls.py에~
views.py에 ~~
models.py에 ~~
forms.py만들고 ~~
terminal에 migration작업, 서버 돌리기 ~~
views.py에 ~
urls.py에 ~
commentapp→new directory→ templates만들기→new directory→commentapp만들기
→create.html만들기
create.html에 accountapp꺼 복붙, 변경하고 ~~
articeapp/templates/detail.html에 ~
create.html에~
articeapp/views.py에~
create.html에~
38강 Commentapp 마무리
articleapp/ detail.html에 for문~ (target_article의 comment를 모두가져옴)
commentapp-templates-commentapp에 detail.html만들고 ~
commentapp-views.py에 ~
detail.html ~
urls.py에~
articleapp의 delete.html복붙하고 변경
// decorators //
views.py에 ~~
39강 모바일 디버깅, 반응형 레이아웃
pragmatic-settings.py
ALLOWED_HOSTS = [’*’]로 수정하기
f12 개발자창
templates-head.html에~
articleapp-list.html에 ~
static-magicgrid.js에 ~
articleapp-list.html에~
static-js-base.css에 ~
40강 ProjectApp 구현
1.project앱 시작
2.pragmatic-settings
-urls
3.project앱에서 urls 파일만들기
앱네임 설정
list,create,detail (만들 view에 대한 라우팅 설정)
ProjectCreateView만듬. project라는 모델 사용
models.py
forms.py
5.마이그레이션
6.views.py에서 form, create.html, successurl 설정
7.templates-projectapp-create.html만들기(accountapp복붙하고 수정, enctype추가) , detail.html만들기(accountapp복붙하고 수정)
8.list.html은 articleapp복붙 하고 수정
*projectapp-templates-snippets에 card_project.html만들어줌
* pagination.html
container a 삭제후 고정된 너비 사용 ~~
9.card_project.html에서 ~~
static-base.css(전체)에서 ~
card_project.html에서 ~~
header.html에서 ~
base.css에서 ~
41강
articleapp- models.py에 (모델바꿈)~
forms.py에 ~
마이그레이션
views.py에 ~
(View 안에서 Mixin 사용하기
MultipleObjectMixin : 여러가지 object를 다룰 수 있게 해줌)
templates-detail.html에 ~
articleapp-list.html복사→tempaltes-snippets에 list_fragment.html생성 후 붙여넣기, 수정
detail.html에 ~
accountapp-views.py에 ~
-templates-detail.html에 ~
42강 RedirectView을 통한 SubscribeApp 시작
terminal~
pragmatic-settings.py, urls.py에 ~
subscribeapp에 urls.py만들고 ~
models.py에~
makemigrations→migrate
views.py에 ~
projectapp-templates-detail.html에 ~
subscribeapp-urls.py에 ~
projectapp-templates-detail.html에 ~
views.py에 ~
projectapp-templates-detail.html에 ~
43강 Field Lookup을 사용한 구독 페이지 구현
1.유저가 구독하고 있는 프로젝트를 확인
2.그 프로젝트 안에 있는 모든 게시글을 가져오기
Articles.objects.filter(pk=xxx, user=xxx) → Articles.objects.filter(project__in=projects)
subscribeapp-views.py에~
subscribeapp에 template - subscribeapp- list.html 만들기
list.html에 ~~
urls.py에 ~
templates-header.html에 ~