반응형

<순서> : 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

+ Recent posts