반응형

<해야할 것 >

1. 글자 수 제한 (..More)

<models.py>

1
2
def summary(self):
        return self.body[:100//추가
cs


2. ..More에 링크 걸기

<home.html>

1
2
3
4
5
6
{% for blog in blogs.all %}
    <h1> {{blog.title}} </h1>   
    <p> {{blog.pub_date}} </p>
    <p> {{blog.summary}} <a href="{%url 'detail' blog.id %}">...more</a> </p>
    <br><br>
{% endfor %}
cs



3. detail.html 페이지 연결하기

<detail.html>

1
2
3
4
5
<h1>자세한 본문 내용</h1>
<br>
<h2> 제목 : {{blog.title}} </h2>
<h2> 작성 날짜 : {{blog.pub_date}} </h2>
<h2> 본문 전체 : {{blog.body}} </h2>
cs


<pk, path converter, get_object_or_404>

##하나의 detail.html을 통해서

=> n번째 블로그 객체를 요청하면 n번 객체 내용 불러오기


->[pk] =데이터 구분자


=> url 설계 #/blog/n


->[path converter] =우리사이트/blog/객체번호(n)

=>여러 객체들을 다루는 계층 url 자동생성 : <type:변수이름> #type  :int, srt ...
<urls.py>

1
path('blog/<int:blog_id>', blog.views.detail, name="detail"),
cs


=> 존재하지 않는 객체를 요청할 404에러 띄우기


->[get_object_or_404] =404 에러  



<views.py>

1
2
3
4
5
6
from django.shortcuts import render, get_object_or_404
 
 
def detail(request, blog_id):
    blog_detail = get_object_or_404(Blog, pk = blog_id)
    return render(request, 'detail.html', {'blog': blog_detail})
cs

반응형

'Web > Django' 카테고리의 다른 글

[4주차]2.blog-(2)  (0) 2019.03.04
[4주차]2.blog-(1)  (0) 2019.03.04
[3.5주차]Bootstrap  (0) 2019.03.03
[3주차]model & admin  (0) 2019.03.03
[2.5주차]GIT  (0) 2019.03.03
반응형

1. Bootstrap : CSS/ Javascript 기반 웹 프레임 워크 -> 반응형 웹 지원 /브라우저 호환 /다소 낮은 성능 /양산형 디자인


<실습>


-https://getbootstrap.com/ -> example template/ components(개별 디자인)


-BootstrapCDN(content delivery network)  -> 온라인 상에 있는 콘텐츠 효율적으로 전달/head에 삽입 후 컨텐츠 복사, 삽입

1
2
3
4
5
6
7
8
<head>
    #css
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
    #js,jquery,popper.js
    <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.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
</head>
cs


-설정 순서

-> CDN설정 : Bootstrap CDN 복사,붙여넣기

->디자인 요소 끌어오기 : Documentation -> components에서 디자인 요소 선택, 복사, 붙여넣기

Examples 에서 템플릿 선택 -> 복사 , 붙여넣기

->다양한 템플릿 : https://startbootstrap.com



#semantic 태그 참고  주소: https://www.w3schools.com/Html/html5_semantic_elements.asp


#웹 전체 차용 시 페이지 소스 보기 -> cltr +a -> body 삽입

반응형

'Web > Django' 카테고리의 다른 글

[4주차]2.blog-(1)  (0) 2019.03.04
[4주차]1.pk, path converter, get_object_or_404  (0) 2019.03.03
[3주차]model & admin  (0) 2019.03.03
[2.5주차]GIT  (0) 2019.03.03
[2주차]word counter 이론 & 실습  (0) 2019.03.03
반응형

#  선행사항 : python -class

-class : 파이썬에서 객체 지향 프로그래밍의 기본단위

-메서드 (method) / 속성(property)/클래스변수(class variable), 인 스턴스변수(instance variable), 초기자(initializer), 소멸자(destructor)로 구성


# 요약=데이터베이스에어떤데이터를넣을지정의하고,admin의권한으로데이터생성


1. models.py 안에 어떤 종류의 데이터 처리할지 class 정의

2. DB에게 알아듣게 하기(makemigrations, migrate)

3. Admin 계정 만들기(admin.py에 활용할 데이터 등록)


<Model>

-데이터 생성, 데이터베이스 다룰 수 O

-데이터 처리 형식 : models.py -> Class로 정의 -> class 계속 호출하여 같은 형식 데이터 계속 사용

-Django의 model.py 변경 -> DB에 선언 해주어야 함


1
2
3
$python manage.py makemigrations #마이그레이션 파일 생성
$python manage.py migrate # db에 만든 변경내용 적용
 
cs


<Admin>

-admin 계정 생성 

1
$python manage.py createsuperuser
cs

-계정생성 후 admin.py에 데이터 등록


<<실습>>

project 생성 -> app 생성 -> project에 app연결 후 모델 생성!


-models.py

1
2
3
4
5
6
7
class Blog(models.Model):
    title = models.CharField(max_length = 200)
    pub_date = models.DateTimeField('data published')
    body = models.TextField()
 
    def __str__(self):
        return self.title # 장고 db 확인 시 타이틀이 보이게 함 원래는 object(1)으로 보임
cs

-변경된 데이터 DB에 적용 #SETTINGS.PY의 DATABASES부분에서 db타입 바꿀 수 있음

1
2
$python manage.py makemigrations #마이그레이션 파일 생성
$python manage.py migrate # db에 만든 변경내용 적용
cs


-admin 계정 생성

1
2
$python manage.py createsuperuser #name->email->password 순 입력
 
cs


-Admin 사이트에 항목추가 / admin.py 에 models.py에 만든 class 추가

1
2
3
4
from .models import Blog #import model에서 Blog 객체 불러오기
 
admin.site.register(Blog) #admin 사이트에 Blog 등록
 
cs


-DB데이터 템플릿으로 출력/app->views.py

1
2
3
4
5
from .models import Blog
 
def home(request):
    blogs = Blog.objects # 쿼리셋 # 메소드
    return render(request, 'home.html', {'blogs': blogs})
cs


#쿼리셋 : 모델로부터 전달받은 객체

#메소드 : 쿼리셋의 기능을 처리하고 정렬(종류 : .all().count().last().first()

#blogs를 사전형 객체 blogs에 담기(template 출력 위해서!)

#쿼리셋과 메소드 형식

모델=쿼리셋(objects).메소드


-app -> templates -> home.html

1
2
3
4
5
6
{% for blog in blogs.all %}
    <h1> {{blog.title}} </h1>   
    <p> {{blog.pub_date}} </p>
    <p> {{blog.body}} </p>
    <br><br>
{% endfor %}
cs


-urls.py

1
2
3
4
5
6
import blog.views
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blog.views.home, name="home"),
]
cs


반응형

'Web > Django' 카테고리의 다른 글

[4주차]1.pk, path converter, get_object_or_404  (0) 2019.03.03
[3.5주차]Bootstrap  (0) 2019.03.03
[2.5주차]GIT  (0) 2019.03.03
[2주차]word counter 이론 & 실습  (0) 2019.03.03
[1.5주차]MVT 패턴  (0) 2019.03.03
반응형

1. Git 이란?

-git : 분산 저장 관리 시스템

-여럿이 같이 개발할 수 있게 해줌

-작업공간, staging area, repository

-저장(git add, commit)/ 협업(git branch, merge)


2. git 명령어

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$git init # git 저장소 초기화(맨 처음에 한번)
$git status # 저장소 상태 체크, 프로젝트 현재 변경사항 확인
$git add . # 모든 파일을 staging area로 올림(git add <filename>)
$git commit -"commit message" #저장소 -repository
 
#로컬 repository -> 온라인 repository
$git remote add origin <github 주소>
$git push (-u origin master)
 
# git ignore
1.https://www.gitignore.io/ 에서 Django검색
2.해당 내용 복사 
3.프로젝트 폴더에 .gitignore 파일 생성 (manage.py 있는 곳)
4.붙여넣기
 
cs


3. git push 실습


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<git push>
$git -version
$git init # git 초기화, git 현재 디렉터리에 git 저장소 생성(로컬)
$git status # 저장상태, commit, 변경 상태 확인
$git add . #모든 파일을 git staging area로 추가
$git commit -"commit message" #staging area에 추가된 파일을 설명과 함께 넣음$
 
<github repositroy 생성 이후>
$git remote add origin "저장소 링크" # 저장소 링크와 로컬 연결
$git push -u origin master # git push , commit한 파일 최종 전송
#id, pw 입력 -> 로그인 후 연결
 
<프로젝트 코드 수정시>
$git add . #모든 파일을 staging area에 추가 
$git commit -"commit message" #staging area에 추가된 파일 설명과 확정
$git push -u origin master #init 과정 X
 
<git clone>
$git clone "복사할 url"
 
<저장소 변경>
$git remote set -url origin 변경 url
 
cs


반응형

'Web > Django' 카테고리의 다른 글

[3.5주차]Bootstrap  (0) 2019.03.03
[3주차]model & admin  (0) 2019.03.03
[2주차]word counter 이론 & 실습  (0) 2019.03.03
[1.5주차]MVT 패턴  (0) 2019.03.03
[1주차]hello world 이론 & 실습  (0) 2019.03.03
반응형

<순서> : project -> app -> app 등록 -> template 만들기 -> view 만들기 -> url 연결


<<기본 설정 >>


1. 프로젝트 시작  : 가상환경 시작 

1
$source myvenv/Scripts/Activate 
cs


project 시작 (생성 후 firstproject에 같은 이름의 프로젝트 생성되니 맨 상위 폴더를 'first_assignment'로 바꿔줌

1
$django-admin startproject firstproject
cs

2. app 생성 (터미널 경로  : manage.py 가 있는 폴더에 있게 함)

1
$python manage.py startapp wordcount
cs


3. app 등록 (firstproject-> settings.py)

1
2
3
INSTALLED_APPS = [
    'wordcount.apps.WordcountConfig',
]
cs


4. template 만들기 (생성한 app폴더 안에(wordcount) -> templates 폴더 생성-> wordcount라는 폴더 생성 -> home.html 생성) 


5. view 만들기 (생성 app 폴더 wordcount -> views.py)

1
2
3
4
5
6
7
from django.shortcouts import render
 
def home(request):
    return render(request, 'wordcount/home.html')
cs


6.URLconf 연결 (firstproject 폴더 -> urls.py ) :urls.py 에 views.py 를 import / path 설정

1
2
3
4
5
6
7
8
9
from django.contrib import admin
from django.urls import path
import wordcount.views
 
urlpatterns p [
    path('admin/', admin.stie.urls),
    path('', wordcount.views.home, nama="home"),
]
 
cs


7. 서버 돌려보쟈 

1
$python manage.py runserver
cs



1. 기본 home.html 

1
2
3
4
5
6
7
8
9
<h1>WORD COUNT</h1>
 
<a href="">ABOUT</a>
 
<form action="">
    <textarea cols="40" rows="10" name="fulltext"></textarea>
    <br>
    <input type="submit" value="Count!" />
</form>
cs


2. about.html (wordcount->templates->wordcount->about.html)

1
2
3
4
5
<h1>ABOUT</h1>
 
<p>멋쟁이 사자차럼 7기 운영진 오지수가 만든 wordcount</p>
 
<a href="">ABOUT</a>
cs

3. view 만들기 (wordcount ->views.py)

1
2
3
4
5
6
7
from django.shortcouts import render
 
def home(request):
    return render(request, 'wordcount/home.html')
 
def about(request):
    return render(requst, 'wordcount/about.html')
cs


4. URLconf 만들기 

1
2
3
4
5
6
7
8
9
from django.contrib import admin
from django.urls import path
import wordcount.views
 
urlpatterns p [
    path('admin/', admin.stie.urls),
    path('', wordcount.views.home, nama="home"),
    path('about/', wordcount.views.about, name="about"),
]
cs


5. 링크 잇기 

1
2
3
4
5
<a href="{% url 'about' %}">ABOUT</a>
<a href="{% url 'home' %}">HOME</a>
 
// {% %} : django명령어 쓰겠다 
   {% url '이름' %} : urls.py 에서 설정했던 path 실행 / '이름':path 설정 시 name=".."적었던 
cs


6. count 페이지 만들기 

1
2
3
4
5
6
7
8
9
<h1>당신이 입력한 텍스트는 <!--총단어수--> 단어로 구성되어 있습니다.</h1>
 
<a href="{% url 'home' %}"> 다시하기 </a>
 
<h1>입력한 텍스트: </h1>
<!-- 입력받은 전체 텍스트 -->
 
<h1>단어 카운트:</h1>
<!-- '단어' - '단어나온 횟수' -->
cs


7. home에서 데이터 받아 -> count로 넘겨주기 (home-'textarea'-submit => count로 넘어가야함)


-views.py

1
2
3
4
5
6
7
8
9
10
from django.shortcouts import render
 
def home(request):
    return render(request, 'wordcount/home.html')
 
def about(request):
    return render(requst, 'wordcount/about.html')
 
def count(request):
    return render(request, 'wordcount/count.html')
cs


-urls.py 

1
2
3
4
5
6
7
8
9
10
11
from django.contrib import admin
from django.urls import path
import wordcount.views
 
urlpatterns p [
    path('admin/', admin.stie.urls),
    path('', wordcount.views.home, nama="home"),
    path('about/', wordcount.views.about, name="about"),
    path('count/', wordcount.views.count, name="count"),
]
 
cs


-home.html

1
2
3
4
5
6
7
8
9
<h1>WORD COUNT</h1>
 
<a href="{% url 'about' %}">ABOUT</a>
 
<form action="{% url 'count' %}">
    <textarea cols="40" rows="10" name="fulltext"></textarea>
    <br>
    <input type="submit" value="Count!" />
</form>
cs


-textarea -> submit => views.py 에 있는 count함수로 가서 -> 데이터 명명 : full_text라 변수 만들어 데이터 담음


1
2
3
4
5
6
7
8
9
10
11
12
from django.shortcouts import render
 
def home(request):
    return render(request, 'wordcount/home.html')
 
def about(request):
    return render(requst, 'wordcount/about.html')
 
def count(request):
    full_text = request.GET['fulltext'//textarea에서 전송된 정보를 full_text라는 변수에 담는다
    return render(request, 'wordcount/count.html', {'fulltext' : full_text})
    //이러한 데이터도 count.html 에 넘겨주
cs


-count.html

1
2
3
4
5
6
7
8
9
10
<h1>당신이 입력한 텍스트는 <!--총단어수--> 단어로 구성되어 있습니다.</h1>
 
<a href="{% url 'home' %}"> 다시하기 </a>
 
<h1>입력한 텍스트: </h1>
<!-- 입력받은 전체 텍스트 -->
{{ fulltext }} //view에 데이터 받아 -> 템플릿에서 보여줌 
  
<h1>단어 카운트:</h1>
<!-- '단어' - '단어나온 횟수' -->
cs


**{% %} vs {{ }}

    • {% %}는 django 문법을 활용할때 사용
    • {{ }}는 넘어온 데이터를 화면에 출력하기 위해 사용

-wordcount에 필요한 함수 설정(views.py)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1. 총 단어수 세는 기능 구현
 
def count(request):
        full_text = request.GET['fulltext']
    
        word_list = full_text.split()
 
 
2. 각 단어별로 나온 횟수 세는 기능 구현
 
        word_dictionary = {}
    
        for word in word_list:
            if word in word_dictionary:
                # Increase
                word_dictionary[word] += 1
            else:
                # add to the dictionary
                word_dictionary[word] = 1
    
        return render(request, 'wordcount/count.html', {'fulltext': full_text, 'total'len(word_list), 'dictionary': word_dictionary.items()})
cs


-count.html

1
2
3
4
5
6
7
8
9
10
11
12
<h1>텍스트는 {{total}} 로 구성되어 있습니다.</h1>
 
<a href="{%url 'home' %}">다시 home으로</a>
<br>
<h2> 입력한 텍스트 </h2>
{{fulltext}}
 
<h2> 단어 카운트 </h2>
{% for word, countTotal in dictionary %}
    {{word}} - {{countTotal}} 
<br>
{% endfor %}
cs



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
31
32
33
34
35
36
37
38
39
40
- 공백 기준으로 단어 나눠서 리스트로 반환
 
.split() 
 
 
 
- 리스트 생성
 
listname = {}
 
 
 
- 변수 html에서 쓰고싶을 때 = 사전형 객체
 
render(request, 'count.html', {'key': value} 
 
 
 
- list 길이
 
len(listname)
 
 
 
- list를 쌍으로 전달
 
.items()
 
 
-> html에서
 
dict_items([('안녕'1), ('하이'2)])
 
 
word_dictionary.items()가 이 아니고 word_dictionary로 전달하면
 
{'ㅇㅏㄴㄴㅕㅇ'1'ㅎㅏㅇㅣ'2}
 
for문 돌지 않음 =>  items()로 전달!
 
cs


반응형

'Web > Django' 카테고리의 다른 글

[3주차]model & admin  (0) 2019.03.03
[2.5주차]GIT  (0) 2019.03.03
[1.5주차]MVT 패턴  (0) 2019.03.03
[1주차]hello world 이론 & 실습  (0) 2019.03.03
[1주차]기본환경 셋팅  (0) 2019.03.03
반응형

1. MVT 패턴 ?


-Model - Template - View


2. Model (데이터 저장 형태를 어떻게 할지 설정)

-데이터 베이스에 저장되는 데이터 (표로 정리되어 데이터 베이스에 저장)


3. Template (유저에게 보여지는 화면을 고치고 싶다)

-사용자에게 보여지는 부분 (.html파일)

-장고 템플릿 시스템 문법에 맞는 python 문법 활용하여 작성, 디자인 작업과 다른 작업을 분리 ->확장성 극대화

-URLconf (가공한 데이터를 유저가 보는 화면으로 넘겨주고 싶다)-> url 설계 

=> view와 template을 이어주는 역할 : url => 이 부분을 만들어 주는 작업을 URLconf = path


4. View (데이터 처리해서 가공하고 싶다)

-웹 요청을 받고, 전달받은 데이터들을 해당 어플리케이션 로직으로 가공-> 웹 템플릿에 보내줌

반응형

'Web > Django' 카테고리의 다른 글

[3주차]model & admin  (0) 2019.03.03
[2.5주차]GIT  (0) 2019.03.03
[2주차]word counter 이론 & 실습  (0) 2019.03.03
[1주차]hello world 이론 & 실습  (0) 2019.03.03
[1주차]기본환경 셋팅  (0) 2019.03.03
반응형

<< 이론 >>

1. Django는 파일 - 폴더 간의 티키타카


2. manage.py 로 서버 작동


3. app : 프로젝트 구성단위 


<<실습>>

-기초 작업 : 가상환경 활성($source myvenv/Scripts/Activate) -> 프로젝트 만들기($django-admin startproject firstsite) -> app 만들기 (python manage.py startapp hello)-> 앱 안에 폴더 만들기 


-순서 : 

1
2
3
4
1. settings.py ⇒ project에게 app의 존재 알리기
2. templates ⇒ views.py에서 처리된 데이터를 받아 사용자에게 화면을 보여줌
3. views.py ⇒ 데이터를 처리하는 함수 작성
4. urls.py ⇒ 요청에 맞는 함수를 views.py에서 찾아 요청 전달
cs


1. project에 app 존재 알리기 : settings.py  => 'app 이름.apps.대문자app이름 + Config'


1
2
3
4
5
6
7
8
9
INSTALLED_APPS = [
    'hello.apps.HelloConfig'   
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
cs


2. Template 만들기 (app폴더 -> templates 폴더 생성 -> home.html)

3. app 기능 구현하기 : views.py => 함수 생성


1
2
3
4
5
6
7
from django.shortcuts import render
 
# Create your views here.
 
 
def home(request):
    return render(request, 'home.html')
cs

4. url요청 views에 연결하기 : urls.py

1
2
3
4
5
6
7
8
9
from django.contrib import admin
from django.urls import path
import hello.views
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', hello.views.home, name='home'), //path(route(도메인 뒤에 붙음),views안에 정의된 함수,path이름을 설정)     
                                             //가능한 함수이름 = path의 name 해야 정신건강에 
]
cs

5.  정리 




  • 반응형

    'Web > Django' 카테고리의 다른 글

    [3주차]model & admin  (0) 2019.03.03
    [2.5주차]GIT  (0) 2019.03.03
    [2주차]word counter 이론 & 실습  (0) 2019.03.03
    [1.5주차]MVT 패턴  (0) 2019.03.03
    [1주차]기본환경 셋팅  (0) 2019.03.03
    반응형

    0. 장고란?

    -Django : 파이썬으로 작성된 오픈 소스 웹 어플리케이션 프레임워크(웹 서비스 개발 시 반복해서 만드는 것 표준화 해서 묶어놓은 개발환경)


    -왜 파이썬? : 배우기 쉬워서/ 확장성이 좋아서/ 관련 커뮤니티가 커서


    - Django 특징 : python 기반이라 익히기 쉬움 / MTV 패턴 / admin 기능 제공 / 쉬운 url 파싱 기능 지원



    1. 기본환경 셋팅 

    - 필요한 기본 작업 : python 3.6 이상 버전 설치 (https://www.python.org/)

         VS code 설치 (https://code.visualstudio.com/)

    git 설치

    작업 dir 만들기

    python 설치 확인 


    -VS Code 셋팅 : 디렉터리 열기 ( $ code . = ctrl + shift + ')

     

    -VENV 생성 & 가상환경 실행  

    1
    2
    USER@DESKTOP-SRO5U54 MINGW64 ~/Desktop/likelion2
    $ python -m venv myvenv
    cs

    -가상환경 실행하기  ==> * Django 개발 시 무조건 가상환경 키고 시작한다. (끄는 법 : deactivate)

    1
    2
    3
    USER@DESKTOP-SRO5U54 MINGW64 ~/Desktop/likelion2
    $ source myvenv/Scripts/activate
    (myvenv)
    cs


    -Django 설치하기 

    1
    2
    USER@DESKTOP-SRO5U54 MINGW64 ~/Desktop/likelion2
    $ pip install django
    cs




    반응형

    'Web > Django' 카테고리의 다른 글

    [3주차]model & admin  (0) 2019.03.03
    [2.5주차]GIT  (0) 2019.03.03
    [2주차]word counter 이론 & 실습  (0) 2019.03.03
    [1.5주차]MVT 패턴  (0) 2019.03.03
    [1주차]hello world 이론 & 실습  (0) 2019.03.03

    + Recent posts