Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python
Code

Кіраўніцтва для пачаткоўцаў па Django Rest Framework

by
Difficulty:BeginnerLength:MediumLanguages:

Belarusian (беларуская мова) translation by Jenyia (you can also view the original English article)

Такім чынам, вы навучыцеся выкарыстоўваць Django Web Framework і пакахаеце яго. Але вам патрэбен прывабны, просты ў выкарыстанні API для вашага прыкладання? Не глядзіце не далей, чым на Django Rest Framework (DRF). DRF з'яўляецца магутным, складаным і дзіўна простым ў выкарыстанні. Ён вашага API і магчымасць вяртання неапрацаванага JSON. Django Rest Framework забяспечвае магутную Серыялізацыю мадэлі, адлюстраванне дадзеных з выкарыстаннем стандартных уяўленняў, заснаваных на функцыях, ці атрыманне грануляра з магутнымі ўяўленнямі на аснове класаў для больш складаных функцый. Усё ў цалкам сумяшчальнай з REST абалонцы. Давайце пачнем.

Закладка асноў

Пры працы з прыкладаннямі Python заўсёды рэкамендуецца ізаляваць вашу распрацоўку віртуальным асяроддзем. Гэта дапамагае прадухіліць канфлікты версій паміж бібліятэкамі, якія вам патрэбны ў вашым дадатку, і бібліятэкі, якія вы, магчыма, ужо ўсталявалі на вашым кампутары, спрашчаюць ўстаноўку залежнасцяў ў віртуальнай env з дапамогай файлаў requirements.txt, і, нарэшце, ён забяспечвае сумеснае выкарыстанне асяроддзя распрацоўкі з дапамогай іншых распрацоўнікаў.

У Tuts + ёсць два выдатных відэароліка пра тое, як усталяваць virtualenv і virtualenvwrapper. Выдаткуйце некалькі хвілін, каб паглядзець гэтыя відэаролікі, каб атрымаць virtualenv і virtualenvwrapper, каб усталяваць іх на вашым кампутары. Калі вы ўжо ўсталявалі іх, прапусціце наступны падзел.

Налада віртуальнага асяроддзя

Першае, што мы зробім як частка нашага прыкладання, - гэта наладзім віртуальнае асяроддзе. Увядзіце ў свой тэрмінал наступныя каманды.

Усё роўна, дзе вы знаходзіцеся ў файлавай сістэме, калі гэтыя каманды запушчаныя. Усе файлы virtualenv захоўваюцца ў цэнтралізаваным месцы і актывуюцца па патрабаванні.

Ўстаноўка прыкладання Django

Паколькі ў гэтым артыкуле гаворка ідзе не пра самае Django, я трохі зэканоміў час, стварыўшы рэпазітар, у якім мы будзем працаваць. Гэта простае прыкладанне для кніжнай паліцы, якое дазволіць нам захоўваць спісы аўтараў і кніг. Загрузіце рэпазітар кампаньёнаў у гэты артыкул у каталог па вашаму выбару, а затым запусціце каманду pip install -r requirements.txt для ўстаноўкі ўсіх залежнасцяў. Памятаеце, што вы актывавалі віртуальную сераду, якую мы ўсталявалі на апошнім кроку. Па завяршэнні ўстаноўкі вы можаце набраць fab runningerver для запуску лакальнага вэб-сервера і адкрыць вэб-браўзэр, які бачыць у http://127.0.0.1:8000/. Калі вы бачыце спіс аўтараў на экране, значыць, усё гатова.

Калі ў нейкі момант вы не атрымаеце чаканых вынікаў, паспрабуйце пераключыць галіну лакальнага рэпазітара ў канец, каб убачыць вынікі: git checkout final.

Fab? Што гэта?

Fab == Fabric, запуск задачы Python. З дакументаў:

“Fabric - гэта бібліятэка Python (2,5 або вышэй) і інструмент каманднага радка для аптымізацыі выкарыстання SSH для задач разгортвання прыкладанняў або сістэмнага адміністравання”.

Хоць больш поўная дыскусія пра Fabric выходзіць за рамкі гэтага артыкула, я ўкараніў некаторыя асноўныя каманды fab, якія спрашчаюць працу з гэтым дадаткам.  Вы бачылі каманду fab runserver. Існуе таксама каманда fab shell, якая выклікае інтэрактыўную абалонку iPython у кантэксце прыкладання і каманду fab syncdb, якая запускае каманду syncdb Django для сінхранізацыі змяненняў у мадэлях базы дадзеных.

Праца з Серыялізацыяй

Адной з магутных магчымасцяў Django Rest Framework з'яўляецца ўбудаваная серыялізацыя мадэлі, якую яна прапаноўвае. Маючы ўсяго некалькі радкоў кода, вы можаце ствараць магутныя прадстаўлення вашых дадзеных, якія могуць быць дастаўлены ў некалькіх фарматах. Як ужо згадвалася раней, наш дадатак будзе простай кніжнай паліцай з аўтарамі і кнігамі. Я ўжо стварыў для вас мадэлі Author і Book, таму адкрыйце /app/bookreview/models.py. Ужо ёсць некалькі аўтараў, якія захоўваюцца ў лакальнай базе дадзеных SQLite, таму давайце адкрыем інтэрактыўную абалонку для нашага прыкладання і папрацуем. Перайдзіце ў акно тэрмінала, пераканайцеся, што вы знаходзіцеся ў каталогу ./app і ўвядзіце наступную каманду.

Пасля загрузкі абалонкі увядзіце наступныя некалькі радкоў, каб атрымаць запіс аўтара з базы дадзеных, якая проста апынулася маёй. Якое супадзенне. :)

Аналагічным чынам вы можаце атрымаць усе запісы аўтара з базы дадзеных з дапамогай іншай каманды:

На жаль, гэта не вяртае дадзеныя, якія можа зразумець выклік AJAX. Такім чынам, дададзім серыялізатар для аўтараў. Зачыніце абалонку, набраўшы quit і адкрыйце bookreview/serializers.py. Калі ласка, увядзіце або ўстаўце наступныя некалькі радкоў кода і захавайце файл.

Не ўносячы ніякіх зменаў, серыялізатар дае нам даволі шмат энергіі. Вярніцеся ў абалонку і давайце разгледзім.

Давайце дададзім яшчэ некалькі радкоў кода і паглядзім, што наш API пакажа нам у браўзэры пасля таго, як нашы дадзеныя будуць запушчаны праз наш новы AuthorSerializer.

Праверка API-інтэрфейсу, даступнага ў Інтэрнэце

Спачатку адкрыйце bookreview/urls.py і дадайце наступны радок адразу пасля маршруту index_view:

Затым адкрыйце bookreview/views.py і дадайце гэтыя радкі ў канец файла:

Затым дадайце імпарт для AuthorSerializer уверсе старонкі:

Прадстаўленне па змаўчанні для Django Rest Framework - гэта APIView. Гэта дазваляе вам вызначаць свае ўласныя метады get, put і delete. Гэта добры спосаб атрымаць базавую функцыянальнасць, але ўсё ж кантраляваць канчатковы вынік. У нашым выпадку, аднак, мы дазваляем DRF рабіць цяжкі пад'ём для нас, пашыраючы ListAPIView. Нам проста трэба даць некалькі біт інфармацыі, каб дазволіць DRF падключаць часткі. Мы даем яму мадэль Author, каб ён ведаў, як звяртацца да базы дадзеных, і AuthorSerializer, што DRF ведае, як вярнуць інфармацыю. Мы будзем працаваць толькі з некалькімі ўбудаванымі APIViews, але вы можаце прачытаць аб усіх параметрах на вэб-сайце Django Rest Framework.

Цяпер, калі вы ўнеслі гэтыя змены, пераканайцеся, што ў вас запушчаны сервер, набраўшы fab runningerver, затым увядзіце URL http://127.0.0.1: 8000/authors/. Вы павінны ўбачыць прывабна распрацаваную старонку прагляду API, якая змяшчае спіс усіх аўтараў у базе данных.

Цяпер, калі ў нас ёсць уяўленне API аўтараў, паспрабуйце націснуць гэты URL з дапамогай каманды curl:

Даволі кідкі, так?

Прысваенне аўтарам некаторых кніг!

Хоць гэты від API даволі лёгкі, ён адзін-да-аднаму з базай дадзеных. Давайце пяройдзем да нашага прадстаўлення API, склаўшы больш складаны набор дадзеных для аўтараў, уключыўшы спіс усіе свае кнігі. Адкрыйце bookreview/serializers.py і дадайце наступны радок кода перад вызначэннем класа AuthorSerializer.

Перш чым мы зможам дадаць кнігі ў AuthorSerializer, мы павінны серыялізаваць кнігі. Гэта павінна выглядаць цалкам знаёмым для вас. Паколькі ён амаль ідэнтычны AuthorSerializer, мы не будзем абмяркоўваць его.

Затым дадайце наступны радок адразу пасля docstring класа AuthorSerializer:

Затым дадайце books ў уласцівасць палёў ўнутранага класа Meta AuthorSerializer:

Перазагрузіце /authors/endpoint, і зараз вы павінны ўбачыць масіў кніг для кожнага аўтара. Нядрэнна для яшчэ некалькіх радкоў кода, а?

Классная штука DRF!

Выкарыстанне SerializerMethodField для стварэння карыстацкіх свойств

Серыялізатар разумны ... калі мы пакажам, якую мадэль ён павінен серыялізаваць унутры метакласса, ён будзе ведаць усе аб гэтай мадэлі ... уласцівасцях, даўжыні, значэннях па змаўчанні і т. д. Звярніце ўвагу, што мы не вызначаем якія-небудзь ўласцівасці, знойдзеныя ў мадэлі непасрэдна ў серыялізатары, мы пакажам толькі тое, якія паля павінны быць вернутыя API ва ўласцівасці fields.

Паколькі DRF ужо ведае пра ўласцівасці мадэлі, гэта не патрабуе ад нас паўтарэння. Калі б мы хацелі, мы маглі б быць дакладнымі ў BookSerializer і дадаваць наступныя радкі ... і DRF быў бы проста шчаслівы.

Метод serializers.field дазваляе паказаць на існуючую ўласцівасць мадэлі,source поле і дазваляе відавочна называць яго чымсьці іншым пры вяртанні яго канчатковаму карыстальніку. Але што наконт serializers.SerializerMethodField? Ён дазваляе вам па сутнасці стварыць наладжвальнаю ўласцівасць, якая наўпрост не прывязана да мадэлі, змесціва якой з'яўляецца вынікам выкліку метаду. У нашым выпадку мы вернем URL-адрас, які змяшчае спіс месцаў, куды вы маглі б пайсці, каб купіць кнігу. Давайце дададзім гэты карыстацкі метад.

Адраз пасля docstring BookSerializer дадайце наступны радок:

Затым, пасля вызначэння class Meta BookSerializer дадайце наступныя радкі:

Затым, нарэшце, нам трэба дадаць нашу новую ўласцівасць у спіс палёў.   Зменіце гэта:

на гэта:

Перазагрузіце /authors/ endpoint, і зараз вы павінны ўбачыць URL-адрас, вяртаючыся разам з іншай інфармацыяй аб кнізе.

Даданне канчатковай кропкі аўтара.

У нас ужо ёсць спіс аўтараў, але было б добра, калі б у кожнага аўтара была свая старонка ... сапраўды гэтак жа, як MySpace? Дазваляе дадаць канчатковую кропку API для прагляду аднаго аўтара. Адкрыйце urls.py і дадайце наступны радок пасля маршруту author-list:

Затым адкрыйце view.py і дадайце наступныя радкі пасля класа AuthorView:

Націсніце на адным з імёнаў аўтараў на індэкснай старонцы, і вы ўбачыце, што старонка асобніка загружается.

Рэфактарынг для Win!

Зараз самы прыдатны час для хуткага рэфактарынгу. Паколькі Django прапануе варыянт прызначэння вашых маршрутаў, мы можам спасылацца на маршрут па гэтым імені. Гэта дазваляе нам не ствараць URL-адрас ўручную. Адкрыйце templates/index.html і заменіце наступны фрагмент:

з гэтай линияй

Захаванне дадзеных: хай DRF працуе для вас!

Дагэтуль наш дадатак быў толькі для чытання. Пара пачаць захоўваць некаторыя дадзеныя. Адкрыйце templates/index.html і дадайце наступныя радкі пад загалоўкам аўтараў:

Увядзіце імя, ваша, калі хочаце, і націсніце submit ... і Престо, вы атрымаеце ... памылку?

DRF не зусім такі чароўны ... ці не так ?

Адкрыйце views.py, змяніце клас, які AuthorView пашырае з generics.ListAPIView на generics.ListCreateAPIView. Тады паспрабуйце ўвесці ваш запыт зноў. Бум! Вы аўтар! А ваш настаўнік фізкультуры ў чацвёртым класе казаў, што вы ні на што не здольныя. Але што ён ведаў, яму прыходзілася працаваць цэлы дзень са смярдзючымі шкарпэткамі. Вярніцеся на галоўную старонку аўтара, каб убачыць ваша імя подсвеченным.

Что зараз адбылося? Па змаўчанні ў API View мы выкарыстоўвалі толькі дазволеныя запыты GET канчатковай кропцы аўтараў. Змяніўшы яго на ListCreateAPIView, мы сказалі DRF, што хочам таксама дазволіць запыты POST. Ён робіць для нас усё астатняе. Мы маглі б таксама лёгка вызначыць наш уласны метад post ў AuthorView і зрабіць там дадатковы матэрыял. Ён можа выглядаць так:

Майце на ўвазе, што, хоць DRF забяспечвае цэласнасць базы дадзеных, заснаваную на ўласцівасцях мадэлі, мы не ставім якую-небудзь бяспеку для тых, хто можа атрымаць доступ або выкарыстоўваць гэтую форму. Апусканне ў бяспецы, ўваход у сістэму і кіраванне дазволамі выходзіць за рамкі гэтага артыкула, але досыць сказаць, што ў DRF ёсць функцыі для доступу да праглядам, з якімі вы працавалі, і гэта даволі трывіяльна для настройки.

Будзем заканчваць.

Вы ўжо шмат даведаліся аб платформе Django Rest Framework: як рэалізаваць API-інтэрфейс для прагляду вэб-старонак, які можа вярнуць для вас JSON, як наладзіць серыялізатары для складання і пераўтварэнні вашых дадзеных, а таксама як выкарыстоўваць прадстаўлення, заснаваныя на класе, для абстрагавання кода шаблона.

DRF складаецца з большай, чым некалькі момантаў, якія мы змаглі ахапіць, але я спадзяюся, што вы знойдзеце яго карысным для вашага наступнага прыкладання.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.