Develop/장고 (Django) 멋쟁이사자처럼 7기 운영진

[멋사7기] 8주차 - 1, 2. app 재사용 이론, 실습

안다희 2019. 3. 1. 13:34
728x90

앱은 각 하나의 기능만 담당하도록 만들어져야 한다


그런데 다른 웹에서도 로그인앱이 필요하겠지


그러니까 app을 재사용하려면 "패키징을 해야한다" 그 앱을 다른 프로젝트에 적용해야겠지!

app을 패키징해서 다른 프로젝트에서 install하는 느낌




복붙하는 소스는 장고공식문서에서 구할수 있는데 정리해준대


============실습=============

week7_login project에서

login이라는 app을 재사용하고 싶을때!


1) 프로젝트 밖에 폴더 하나 만든다

proj라는 폴더를 하나 만든다.


2) proj으로 app 이동 (복사x)

이제 week7_login에는 login이라는 app 없다


3) proj 폴더 안에 README.rst 파일 생성

여기에 쓸 내용은 다른 곳에서 가져와서 북붙만 하면됨

https://docs.djangoproject.com/ko/2.1/intro/reusable-apps/


=====
Polls
=====

Polls is a simple Django app to conduct Web-based polls. For each
question, visitors can choose between a fixed number of answers.

Detailed documentation is in the "docs" directory.

Quick start
-----------

1. Add "polls" to your INSTALLED_APPS setting like this::

    INSTALLED_APPS = [
        ...
        'polls',
    ]

2. Include the polls URLconf in your project urls.py like this::

    path('polls/', include('polls.urls')),

3. Run `python manage.py migrate` to create the polls models.

4. Start the development server and visit http://127.0.0.1:8000/admin/
   to create a poll (you'll need the Admin app enabled).

5. Visit http://127.0.0.1:8000/polls/ to participate in the poll.


그리고 README에 한글은 되도록 쓰지 말자.


우리는 login이라는 앱을 재사용하는거니까

polls -> login으로 바꿔주면 되겠지.


**) proj라는 폴더이름보단 django-login 이런 이름을 권장. 나중에 뿌릴 때 django임을 명시하기 위하여






4) proj 폴더안에 LICENSE 파일 생성

코드 공개할 때 얘가 중요한 역할을 한다. 저작권 포괄하는 개념임. 내 컴 내에서만 하면 필요없다


근데 복붙 어디서 해,,,

근데 이걸 만드는 습관! 들이기!


일단 나는 안적음


https://www.olis.or.kr/license/licenseClassiFication.do?mapcode=010001&page=1




5) proj 폴더안에 setup.py 파일 생성

import os
from setuptools import find_packages, setup
with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as readme:
README = readme.read()
# allow setup.py to be run from any path
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
setup(
name='login',
version='0.1',
packages=find_packages(),
include_package_data=True,
license='BSD License', # example license
description='Social Login.',
long_description=README,
url='https://www.example.com/',
author='Your Name',
author_email='yourname@example.com',
classifiers=[
'Environment :: Web Environment',
'Framework :: Django',
'Framework :: Django :: X.Y', # replace "X.Y" as appropriate
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License', # example license
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Topic :: Internet :: WWW/HTTP',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
],
)


빨간글씨만 바꾸고 나머지는 복붙한거임





6) 파이선파일 아닌걸 명시해주는 파일 만들기 MANIFEST.in

include LICENSE
include README.rst
recursive-include login/static *
recursive-include login/templates *
recursive-include login/migrations *





recursive는 그 폴더 안에도 다 포함하겠다 이런뜻

static 파일도 있다면 위처럼 static도 해주는거고~~ 뭔지알지??


login/ 이거는 app이름이 login이니까!!!!




*** 근데 migrations 뺐음........ 왜지

include LICENSE
include README.rst
recursive-include login/templates *



암튼 최종적으로 이렇게 함




7) 이제 얘네 짐싸야지~~

user@DESKTOP-3OU4T9D MINGW64 /e/0_lilelion7/likelion3/proj
$ python setup.py sdist


터미널 위치 proj로 옮기고~


tar가 압축파일

이거 있을거야 proj-dist에


이렇게! 그럼 이걸 install 해주면 되는거야



8) 이제 project에 app 없으니까 install 해줘야겠지

user@DESKTOP-3OU4T9D MINGW64 /e/0_lilelion7/likelion3/proj
$ pip install dist/login-0.1.tar.gz


파일위치 잘보고~



9) 이제 runserver해보면 됨!

user@DESKTOP-3OU4T9D MINGW64 /e/0_lilelion7/likelion3/week7_login
$ python manage.py runserver


굿굿 파일위치 중요해






앱 재사용 끝!



팁 : 만약에 app이 수정되었으면 다시 짐싸고 install 다시 해줘야해!