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