Web/Django

[4주차]2.blog-(1)

exp9405 2019. 3. 4. 14:57
반응형

<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



여기까지하면 게시글 작성까지 완료됨 ^^

반응형