[4주차]2.blog-(1)
<blog 만들기>
1. 기본셋팅 ~url config 까지
-> 가상환경 구축
1 | $ python -m venv myvenv | cs |
-> 가상환경 실행
1 | $ source myvenv/Scripts/activate | cs |
-> django 설치
1 | $ pip install django | cs |
-> 프로젝트 시작
1 | $ django-admin startproject secondproject | cs |
-> app 만들기(프로젝트 안에)
1 | $python manage.py startapp blog | cs |
-> settings.py 에 app 알려주기
1 2 3 | INSTALLED_APPS[ 'blog.apps.BlogConfig', ] | cs |
-> blog app 안에 templates 폴더 ->blog 폴더 -> home.html 생성 (bootstrap cdn도 설정해주기)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <html> <head> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </head> <body> <ul class="nav"> <li class="nav-item"> <a class="nav-link active" href="#">Active</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Link</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Link</a> </li> <li class="nav-item"> <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a> </body> </html> | cs |
##navbar을 더 이쁘게 만들어 보고 싶다 하면 요렇게
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <nav class="navbar navbar-expand-lg navbar-dark bg-dark"> <div class="container"> <a class="navbar-brand" href="#">Like Lion</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNavAltMarkup"> <div class="navbar-nav ml-auto"> <a class="nav-item nav-link active" href="#">Home</a> <a class="nav-item nav-link" href="#">Blog</a> <a class="nav-item nav-link" href="#">수료증</a> </div> </div> </div> </nav> | cs |
-> blog app 안 views.py 에서 함수 설정
1 2 3 4 | from django.shortcuts import render def home(request): return render(request,'blog/home.html') | cs |
-> 프로젝트 안 urls.py에서 urlconfig
1 2 3 4 5 6 7 8 9 | from django.contrib import admin from django.urls import path import blog.views urlpatterns = [ path('admin/', admin.site.urls), path('', blog.views.home, name='home'), ] | cs |
2. model 만들기(blog 폴더 내 -> models.py)
->순서 : models,py 에서 코드 작성 -> $python manage.py makemigrations (migration 만들기) -> $python manage.py migrate(데베적용)
->model : 제목 / 본문/ 작성일자 <models.py>
1 2 3 4 | class Blog(models.Model): title = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') body = models.TextField() | cs |
##migrate가 뭔데?
Django는 python으로 작동하는 웹 프레임워크이지만 DB(데이터베이스)의 경우는 그렇지 않음.
그래서 우리가 내린 python 코드를 DB가 알아 듣게 설명을 해줘야하는 작업이 필요.
위의 makemigrations
는 내가 짠 파이썬 코드를 DB가 알아들을수 있게 번역하는 명령어이고,
migrate
는 DB에 그 내용을 적용하라는 명령어
->model 잘 만들어 졌는지 확인하려면 /admin 페이지에서 확인
3. admin 만들기
1 2 3 4 5 | $ python manage.py createsuperuser Username (leave blank to use 'user'): jisu Email address: 282532@likelion.org Password: wltn2548 Password (again): wltn2548 | cs |
만들어진 superuser로 로그인하면 admin에 들어가 수 있음 요렇게
어 근데 아직 admin에게 알려주지 않아서 blog라는 model이 존재 하지 않음 -> admin에 model 등록하기
-> blog 폴더 -> admin.py
2줄 :같은 폴더 위치에 있는 models라는 파일에 , Blog라는 클래스 가져와
4줄 : admin 이라는 site에 Blog라는 클래스 등록
1 2 3 4 5 6 | from django.contrib import admin from .models import Blog admin.site.register(Blog) # Register your models here. | cs |
새로고침 해보면 blog 객체 생긴게 보임!
아까 만들었던 blog 객체 저장하면 됨
##admin 페이지에서 글 제목 표시 하는 방법 : blog->models.py -> blog class 수정
## def 꼭 들여쓰기 해야함 안하면 에러나용
1 2 3 4 5 6 7 | class Blog(models.Model): title = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') body = models.TextField() def __str__(self): return self.title | cs |
-> model에서 데이터 가져오기 <views.py> 파일 수정해줘야함
1 2 3 4 5 6 7 8 | from django.shortcuts import render from .models import Blog def home(request): blogs = Blog.objects return render(request, 'blog/home.html', {'blogs': blogs}) # Create your views here. | cs |
##Blog를 import 해줌 / Blog.objects(admin 페이지에서 확인했던 blog안 데이터)-> blogs라는 변수에 넣어줌
render -> blogs라는 변수를 template에서 쓸때 blogs라고 해서 가져오겠다고 이름 지어줌
->template 수정하기 {{}}->home.html에 삽입
1 2 3 4 5 6 7 | {% for blog in blogs.all %} <div class="container"> <h1>{{ blog.title }}</h1> <p>{{ blog.pub_date }}</p> <p>{{ blog.body }}</p> </div> {% endfor %} | cs |
여기까지하면 게시글 작성까지 완료됨 ^^