• Tidak ada hasil yang ditemukan

Request-Response flow of django date-time fields with django-bootstrap-datepicker-p1us

Chapter 04: Implementation of Model

4.2 Request-Response flow of django date-time fields with django-bootstrap-datepicker-p1us

,/'

View

o

T Form

?

Field

A

I

Exiends

I I

<'7

,^J

Extends

urlpattem Ii l

TimePickerlnput

TimeField DatellmeField

Fig ure 4. 2 : Req uest-Response flow with django-bootstrap-datepicker-plus

DateField

4.3 Class diagram of django built-in widgets

D.rtrfirnrj Bascl,'tpilt i{ijanqo-f orft rs.}"id{,els) + iorrlar key str*1t

+ :Jrpparls_fi}Craletr*{kt:bo,ll = False

+ _r,til_(*ttrs. tor,]1at) + lorIr3r_val r j*{rralilei:st|inql

Datelnpui idjallgo.f.rrn$.wi.Jgets)

+ fornul k€y:sYiit{l = I]ATF-I N PUT_TO RT,lATS

t temFlare nal.nc:strir]g -

d.iar goif o rmi.\.rdlrets/dats. htfi I

I

Dar*Timelnpr'1 ({ljang+.i6rm5.}vid!.ret$i

+ tormat_kuy:string = OATFTI MF,IIiPUT_TOR !1AT5

I ttrnpiale na,,1a;slrir){, -

diargolf omrslwidget$Jdat*tme. hrml

lrT:Jntlx ilian0o:]arns $iid-qels)

+ frrmat_key:s1iln-q -

f tMF_lNpuLroRMATS t lcnrplate name:sirio.rl -

dian goi f orn1s/,}fidgar* ti.ne. l.Itm,

Figure 4.3: Class diagram of django built-in widgets

4.3.1 DateTimeBaselnput class

This is

the

base class of all date"time classes.

lt

is

a

sub-class of Textlnput class and holds the basic date-time functions that are extended by Datelnput, DateTimelnput, Timelnput classes.

4.3.2 Datelnput class

input_type. 'text'

template_name:'django/forms/widgets/date.html' Renders as: <input lyrpe="text" ...>

This class is used for DateField type fields of django forms. lt shows and validates the date-fields in django forms with the formats listed under DATE_INPUT_FORMATS key.

4.

3.

3 DateTimelnput class

input_type: 'text'

tem plate_name:'django/formslwidgets/datetime. html' Renders as: <input lype="text" ...>

a a o

a a a

23

l,

This class is used

for

DateTimeField type fields of django forms.

lt

shows and validates the date- time ftelds in django forms with the formats listed under DATETIME_INPUT_FORMATS key.

4.3.4 Timelnput class

.

input-type: 'text'

.

tem plate_name:'djangofformsAuidgets/time. html'

.

Renders as: <input type='text" ...>

This class is used for TimeField type fields of django forms. lt shows and validates the date-fields in django forms with the formats listed unde111116F-INPUT_FORMATS key.

il

J 1

4.4 Class diagram of django-bootstrap-datepicker- plus

DaleTirrBa5elnpui (iljao!r/,omr5.'t'di]r i rl - fornlJ{ kty:3ti.ng

- :irlil)rrts_nri{rosef, .nid!:b{lcl - trill5e

- nit (attrs. llrrftral)

- 10rnrai,v;rlua(,r;rl! re):slriiB

Dal*isickerlrlpul - FickH_lypeisl.isE - DATE - lsrmat:s{rinq - /}*\l4itlltY ' f0ririii_koy:glrilrg-.

DATE II'JPUT TORTVTATS

4.4.1 DatePickerBasel nput class

.

input_type:'text'

.

tem pl ate_na m e :' bootstrap_d atepicker3l us/ti me-pi cker. html'

.

Renders as: <input tyrpe="text" ...>

0areTimcPickerklpr{

tnsnhPickerlDput

+ pick r {ypc:$ril1g = DATETitulE YBarPickerl'lpul

r isrtrlalrslriryr -,/ist/t':,ill}lY

+ picker ryperslii!1(, = DAIL :7rl lllttil - Firke. lypq:stffilt . DAi L

I brr,]al;Strin{ - *iY-o/im{l + lormat-k*y:Stling lFtmni:erin!} - !.rry-0141

+ ,a,r,ra,-kcy.;r(ilg - DATFTIMF_INpLrT _FOfiMATS - to[:]dr_kpy st[[,J -

rJAtL lNfrur Foiil"t^ts r ArL r\jpt,l Fo$+.rl^ts

Fi gu re 4.4: Class d iag ram of djang o-bootstrap-d atepicker-plus

Tafirel,icke.lrlpul

+ pirker lype:slrirlg - ilME

+ t+rr*al:5!ri*{, . 'rir\ !Al!1

r l0rsal_kcy:s*inrJ.

fitriE i\FUT IORiIATS Datc PlakcrBarcl npul

r Firkir,t/pr-, .;rr;14 - DATF r igilJra'r:slri!rll - .'nHr.ri.4 + larfttat key:sur1(l = TI NF,INPUT-FORfuIAT5 + *itiit _{aItf:i. I.}r*1a1, ,ptr$i}) + (r{ cotl!€)(lilanlt, !'iilil*. a!1fr}

r 5!ari .il{i-.vrn{*i{.1) + tirl(l_0(eyBI)l_id)

' cfllr:ulille 0FticISi(ririj+n5) _liik_ioillilk"d_irirker)

25

4.4.2 DatePickerl nput class o

picker_tlpe: 'DATE'

.

format:'o/omlo/odlo/oY'

.

format_key:'DATF_INPUT_FORMATS'

.

input-type: 'text'

r

tem pl ate_name :'b ootstrap_d atepi cker_pl us/d ate-picker. html'

r

Renders as: <input type="text" ...>

It

shows

a

bootstrap date-picker calendar

to

select

a

date from

it. lt

validates

the

DateField in django forms with the formats listed under DATtr_INPUT_FORMATS key.

4.4.3 DateTimePickerl

n

put class o

picker_type:'DATETIME'

r

format:'o/omlYodlYoY o/oH:o/oM'

o

format_key:'DATETIME_INPUT_FORMATS'

.

input_type: 'text'

.

tem pl ate_n am e :' bootstrap_d atepi cker_pl us/date-picker. htm I'

r

Renders as: <input lype="text" ...>

It

shows

a

bootstrap date-picker calendar

to select a date with time from it. lt

validates the DateTimeField in django forms with the formats listed under DATETIME INPUT_FORMATS key.

4.4.2 TimePickerl nput class o

picker_type: 'TIME'

r

format:'o/oH.o/oM'

o

format_key:'TIMF_INPUT_FORMATS'

o

input_type: 'text'

4.4.2 MonthPickerl nput class o

picker_type: 'DATE'

.

format:'o/omlo/odlo/oY'

.

format_key:'DATF_INPUT_FORMATS'

.

input_type: 'text'

o

tem plate_name :' bootstrap_datepicke13! us/d ate-picker. htm I'

.

Renders as: <input tyrpe='text" ._.>

It shows

a

bootstrap date-picker calendar

to

select

a

month from

it. lt

validates

the

DateField in django forms with the formats listed under DATtr_INPUT_FORMATS key. The month is stored as a DateField, so it can be used to search between date.ranges without any conversions.

4.4.2 YearPickerl

n

put class

picker-type: 'DATE' form at:' Yoml o/od I o/oY'

format_key:'DATE_I NPUT_FORMATS' input_type:

text'

template_name:'bootstrap_datepicker3lus/date-picker.html' Renders as: <input tyrpe="text" ...>

It

shows

a

bootstrap date-picker calendar

to

select

a

year from

it. lt

validates

the

date-fields in django forms with the formats listed under DATE_INPUT_FORMATS key.

27

4.5 Components of widget

The widget is composed of python classes, HTML templates and JavaScripUCSS resource files.

Templates Hesources (static)

Ease Classes

DatePickerBaselnput DalelimeBaselnputEx

i

j .

DatePickerlnput

I .

llmePickerlnput

; r

DateTimePickerlnput

i .

MonthPickerlnput

I .

YearPickerlnput

, r

date*Plcker.html

; .

time-picker.html

i

--2

-Use-

.

moment-with-locales.min js

*

bootstraFdatetimepicker.min.js

.

bootslrap-datet!mepicker.mi n.css

l

i

Package Hesources

.

datepicker-widget.js

.

datep,cker-widget.css

Fig ure 4. 5: Component d iag ram of django-bootstrap-datepi cker-plus

4.5.1 Classes

The python classes are the widget base classes and their sub-classes in respective python files with py extension.

The base classes are:

DatePickerBaselnput DateTimeBaselnput

fhe

sub-classes are:

.

DatePickerlnput

.

a a

4.5.2 Templates

Templates generates

the

HTML markup needed

to

render

the

date-pickers on screen. They are available

in

widgets since django

version

1.'11. But

this

package includes fallbacks

for

django versions

older than 1'11' The

following templates

are

included

in the

package

which can

be extended on demand.

.

date-picker.html

.

time-picker.html

4.5.3 Resources (JavaScripts/CSS)

The package contains both cDN hosted

resources

where available and package

inctuded

;:t,oo;:t"t

to render the date-picker' The resources inctuded are Javascript and

css

files as listed

The CDN-hosted resources are:

o

moment-withJocal.min.js

.

bootstrap-datetimepicker. min.js

.

bootstrap-datetimepicker. min.css

The package-inctuded resources are:

.

datepicker-widget.js

.

datepicker-widget.css

29

4.6 Directory structure of django-bootstrap-datepicker- plus

The package packed in

bootstrap_datepickerjlus

directory. The python classes are in the root of the directory. The templates are included in a templates directory as per the conversion of django app development. All the package included resources are located in the static folder.

- ^.ir -, ,

::,-

3

Fi g ure 4. 6 : Directory structure of dj an go-bootstrap-datepicker-plus

\

li

_i :_-'

-.._. _': _

:'!'

4.7 System Requirements

4.7 .1 Software Requirements

The

package

is

written

in

Python

3,

and supports

any

latest version

of

django including older django versions back

to

1.8.

lt

works with both Bootstrap 3 and

4. lt

needs jQuery

to

render the date-picker. The complete list of requirements are as follows.

Python >= 3.3 Django >= '1.8 Bootstrap >= 3 jquery >= 1.7.1

4.7 .2 Hardware Requirements

The

package

can be

used

with any

server capable

of

running

a

djangepowered

site

running smoothly. There is no special hardware requirements for this package.

a a a a

3t

System lmplementation

5.1 Creating the base class

5.1 .1 The DatePickerDictionary

1'

The DatePickerDictionary class keeps the record of all the DatePickerlnput classes used by the whole site.

2.

The generate-id method to generate unique lD for each Datapickelnput class.

3.

The get-base_input method to check of Django version used and return DateTimeBaselnput if older django version is used.

32

5.1 .2 The DatePickerBaselnput class

'1. lt extends the Baselnput provided by DatepickerDictionary.

2.

it has the default template_name, picker_type and format.

3.

The config property holds the configurations of the Datepicker

4.

The options property holds the options which are passed direcily to JavaScript date-picker instance.

5.1.3 lncluding the resources

'1. The Media class of the DatePickerlnput holds the list of atl JavaScript and CSS resources that are needed to include in the HTML output.

5.1.4 Date format conversion between Javascript and Python

1. The format-map property holds a mapping of moment date-time format identiflers to python date-time format identifiers.

2. The formatjy2js

method converts

a

python date-time

format to a

moment date.time format.

3. The formatjs2py

method converts

a

moment date-time format

to a

python date.time format.

34

5.1 .5 The Constructor

The init -

method

is the

constructor method

of the

DatePickerBaselnput. Accepts the following arguments

1. self:

the initialized object instance.

2. attrs:

the HTML attributes of the input tag that will render the date-picker.

3. format:

the python dat+time format

4. options:

the options to customize the JavaScript dat+picker instance

The _calculate_options

is a

internal method

that

calculate

the

options of

the

date'picker provided by the user overriding the default options

The get-context method is called by Django before rendering the date-picker. The context returned contains the HTML attributes of the input element.

1.

2.

3.

5.1.6 Methods to link two date-picker

'1.

The start:of

method

takes in the event-id of an

event

to

create link-up between two DatePickerlnputs and sets the DatePickerlnput as the start date of the event.

2. The end-of

method

takes in the

event_id

of an event to create link-up

between two DatePickerlnputs and sets the DatePickerlnput as the end date of the event.

36

5.2 Extending the base class to DatePickerlnputs

5.2.1 Define properties of the sub-classes

1. Create widgets.py file to contain all the sub-classes.

2.

All classes will extend the BaseDatePickerlnput class.

3.

Classes will override the default values to render different date-picker widgets.

5.2.1 Exporting the DatePickerlnput Classes

lmporting

into init

.py makes selected CIasses, functions, etc accessible to the package level

so

they

can

be conveniently imported from

the

package. So

we will

import

the

DatePickerlnput classes to

_init

.py file to make it accessible outside of the package.

38

5.3 Publish to a Github repository

GitHub

lnc. is a

web-based hosting service

for

version control using

Git. lt is

mostly used for computer code. !t offers all of the distributed version control and source code management (SCM) functionality of Git as well as adding its own features.

5.3.1 Objectives

1. Create a fresh repository [1]

2.

Short, memorable but self-explanatory name for the repository

3.

Add a description to the repository that best describes the package

4.

Make the repository public for community suggestions and feedbacks

5.

lnitialize this repository with a README which best represents the package.

I

T

l

*

=

.

I

5.4 Publishing to PyPl

The Python Package lndex (PyPl) is a

repository

of

softvyare

for the python

programming 'language- PyPl helps find and installsoftware developed and shared by the python communig.

Package authors use PyPl to distribute their software.

.z

:

*

t;

t I=t.

t:

I=t1 E_

I

f:

E

c

Fi'j

=j.

5.4.1 Objectives

!

Retease lristory

*

Downtoad files

1.

Host the package on PyPl for easy instaltation via pip [2].

2.

Give the package a unique name that is self-explanatory and search friendly

3-

Upload and maintain different versions of the package with proper dependencies.

8ootstrop3,,'Boofsfrrp4 oafePirlrerfnp&L tri,?iePrrkerfnput, Octelirn eqickertnput^&tronr&picirerlnpuf.. -yeorFickerinpr.,tr r,ffilh d at*-ra n Ee- p i cker fu nct onclr4. fcr {'tlngo uers;on Z 0.5. i. t i, l. I 0 s n d l.

I

Project description

This django widEet containE Bootstrap3y'Boor:trap4 BateFickerinput, Timepickerlnput, DateTirneFickertnput. l.{onthPickerfnput, yearpickerlnpLrt r,'r'ith date-range-picker functiona[ity for django version 2.0,s, 1.11, 1"J.0 *nd i..g. The r,vidget implernents bootstrap- datetinrepicker r.,4 to shor,r' beotstrap-datepicker in django model forms and cuslom forms and can b= configured easily for date-rnnge selection.

Figure 5.2: The PYPI page of the package

Navig*tion

4A

5.5 Publishing to Django Packages

Django Packages is a directory of reusable apps, sites, tools, and more for your Django projects.

This is the

plaee

to list

python packages

that are

specific

to

django framework.

This

directory contains a huge collection of django reusable resources for the passionate developers to find and implement in their own projects. [3]

1.

List the package to a place specific to Django development

2.

Make the package more available to Django developers.

Repo Activity -r3t'tttfed I +;etl

5.5.1 Objectives

Releases

j:_

:::

Documentation

FyFi

Repo

Comparison Grids

$ite*

using this Figure 5.3: The Django Packages page of the Package

I

5.6 Publish Demo pages

5.6.1 Demo with Bootstrap 3

C? *!jae rgo-hootsirap-datet:icker-pius Gfi Giihilb Demo vi'ith Esetstrap 3 ilit?.ir ?r,ith gr-,iltrstrs$ q

dja

n

go-bootstra p-datepicker-p

I

us wid get co

m

pon ents

glart clal€:

2018-05-21

End.tab:

05J232018 stsrt tine:

0e.31 End tnr*:

0s 3t SErtdatetim.:

05i16,2018 12.3.1 EITI .taEtrilE:

05J16i2018 12.31 Stan m6nth:

2018-85-01 End rEofifr:

2018-06-30 Start yBil:

2i,174 1-01 Enal year

2!1 8-1 2-31

a

Figure 5.4: The demo page with bootstrap 3

l

* [- li

l

E

:

.- 't

Jr

:

5.6.2 Demo with Bootstrap 4

O d: a-:g* - bcot:i ia!-r- d a ier; irk* r-p i u: o n fi itnub

dj

a n g o -

bootstrap -d atep

ic [<er-

plu s wid

g

et ca m pon entg

'::1

LJ

n

t

jr t*

t

:f

*

=

?:

#

ffi

ET

5.7 Publish package documentation (README)

No matter how the quality

of a

product is,

a

book

is

always judged by it's cover. The cover

of

a

repository

is the

README

of a

Github repository.

The

README should contain

the

following informations to reflect the important aspects of the package.

1. A small introduction to what the repository is all about.

2.

Some repository badges to reflect some insights of the quality of code inside.

3.

An image to to display the end result of the package.

4.

Some demo links to see the package in action.

5.

Prerequisites of the package.

6.

Detailed usage guide of the package.

7.

Licence and Acknowledgements

5.7.1 The lntroduction

dja ngo

-

bootstra p-datepi cker- plus

Su I\.Io

Hay 3016

Tu l.!e Th Fr

5u

Ir4 o

tu5ay 201

I

Tu lAle Th

',.j"

Fr 5a

l_l

08 31 5a

x +

_+_I

+

44

i

=

!

t

*

= +

5.7.2 Demo, Getting Started

Demo

a :',:..i1:".:':,, . ':-:::l:l:':.1 +,

Getting

Started Frerequisites

. P.,i-ra-r :- = :.3 . [:_;.-:i;* -i:1.I1 r !;1151-1;,>= li

r lXl.ir; r= l.l -t

Installing i-:-:: r.: r'.t,>-,.

:._. _-_:___r_:

i

':.;;iii :i ;:;;::l:r:- :,j,.:',

)

jii!li'',' , '.*:l:t: ':r iala::i{a- :a: ':r'ii:i. '";1a i.Ltr+ -,;-, i"!r.,':_r:;ir., i r.jlif :+i::i;:i ;r..tr:,-) aar ;;i j+-r!.:. i:,: ;;1:j

'. -.h E:::;:.i: r:. i:::-:: '--:-.-:; ):.,2- :a-.:1.--: ---i -: . ti j+:-.:-;!.: 'i : ' ;-. t:.---; ;

=,)i'i-r::a ' i:'!;-5-i,;:j :i''i rlt Liii'r: .r.ii. "r,.,: ii {i?1t? -1't-

: :

t

e

5.7.3 Usage

Usage

(Llstorn Forrn usage

t,ie er

:::=,':'i ;,'-' r';:a-:

46

=

t

F

=

5,7.4 Customising the Options

Testing & Quality Management

=

6.1 Unit-Testing

ln

computer programming, unit testing

is a

software testing method by which individual units of source code, sets

of

one

or

more computer program modules together

with

associated control data, usage procedures, and operating procedures, are tested to determine whether they are fit for use.

6.1 .1 Unit-Testing tools

There are many tools for creating tests in Python. Some of these tools, such as pytest, replace the built-in unittest framework. Other tools, such as nose, are extensions that ease test case creation.

Note

that

many

of

these tools

are

also used

for

integration testing by writing

the test

cases to exercise multiple parts of code at once.

unittest

is the built-in standard library tool for testing Python code.

pytest

is

a

complete testing tool that emphasizes backwards-compatibility and minimizing boilerplate code.

nose is an extension to unittest that makes it easier to create and execute test cases.

Hypothesis is a unit

test-generation

tool that

assists developers

in

creating

tests

that exercise edge cases

in

code blocks. The best way

to

get started using Hypothesis

is

by going through the well-written quickstart.

testify

was a testing framework meant to replace the common unittest+nose combination.

However, the team behind testify is transitioning

to

pytest so it's recommended you do not use testify for new projects.

a a

a a

6.1 .2 Code for Testing

=

t

E

49

6.1.3 Unit-Testing with pytest

pytest is a mature full-featured Python testing tool that helps you write better programs. The pytest framework makes it easy to write small tests, yet scales to support complex functional testing for applications and libraries.

Test Results:

Figure 6.'t: pytest unit-test results

6.1.4 Unit-Testing with Travis-Cl

Travis

Cl is a

hosted, distributed continuous integration service used

to

build and

test

software projects hosted at GitHub. Open source projects may be tested at no charge via travis-ci.org.

6.1.4.1 Travis-Cl build flow

6.1 .4.2 Travis-Cl Result

F

{3 .+€

*""#

E

Figure 6.2: travic-Cl build result

51

6.1.4.3 Travis-Cl build history

!i*Fr€

i*d*

=

,,,=*{13

6.2 Code-Coverage

ln computer science, test coverage is a measure used to describe the degree to which the source code of a program is executed when a particular test suite runs. A program with high test coverage, measured

as a

percentage,

has had more of its

source code executed during testing, which suggests

it

has

a

lower chance

of

containing undetected sofiware bugs compared

to a

program

with low test coverage.

6.2.1 Coveralls. io stats

s#ersffeg&s

?.

!&

{F

tf ct

*

+

tr#tr$ffi sr #Js$€##"###r$rffiss :#gflgtr$#trfftr "f*#$

*ir{q,"rf

:+1:r':.J+rii;

ffi#

q,.-".s

t&1T

$t"i[* *ii

*R&i{{t{ r",.t*:?$*

sffiffiffin

M

ffi

E

53

6.2.2 Coveralls.io details and builds

f0vEFsrs,s

=4

fiefE?{T

frlj't*s

ffi

r--i::;.:j

ffiSE

ffi

j--.:::

Figure 6.4: coveralls.io report

6.3 Maintainability

Maintainability

is an

estimate

of

technical

debt in the repo

based

on a

standardized 1O-point assessment of Duplication, Cyclomatic Complexity, Cognitive Complexity, and structural issues.

6.3.1 Code-Climate Report

The 10 checks outlined below are enabled by default in Code Climate.

.

,Argument

count

- Methods or functions defined with a high number of arguments

.

Gomplex Iogic - Boolean logic that may be hard to understand

.

File length - Excessive lines of code within a single file

r ldentical blocks of code -

Duplicate code

which is

syntactically identical

(but may

be formatted differently)

o Method complexity -

Functions

or

methods

that

may

be

hard

to

understand (Cognitive Complexity)

o

Method

count

- Classes defined with a high number of functions or methods

.

Method length - Excessive lines of code within a single function or method

o

Nested

control flow

- Deeply nested control structures like if or case

.

Return statements - Functions or methods with a high number of return statements

. Similar blocks

of code - Duplicate code which is not identical but shares the same structure (e.9. variable names may differ)

ai

coar crtraalg

",..-:i-'

il'r37

(-.)i.i''i:,i.)-:.-ji-r,:t--::,1

i:'-t ;

,:-.

-:',j

._ i,,.:i'-i_rl.

j::,

, .

:

, '. al

:

,.',, li

55

Project Success

.

7.1 Project Stats on Github

a a a

1,11:..r::*::

7.1.1 Watchers

watching

a

Repository registers

the

user

to

receive notifications

on

new discussions, as well as events in the user's activity feed. See Repository Starring for simple repository bookmarks.

These are the developers cunently watching this repository for instant notification of any updates published to this repository.

O r.lt:,r1:ir - ; * i..:rii a.

Watchers

Watchers:7 Stars: 39 Forks: 5

iir-,iai : :, ":i.11

;ii.ti nit ;1

{!

L ,8 'slt

? )i. .a L -tj i; 11;;:;,

iti.:

5

*

r:1 *, t',, :;t 1:;-: :.: ii.:

* li'.':..3 -: t:i. t 7: lj: :. t I j..-; I i_

i::: : '

t i'__))'-.\

i:i:.

O ij.i.:t:ir -

56

7 .1

.2 Stars

Repository Starring

is a

feature

that lets

users bookmark repositories. Stars are shown next to repositories to show an approximate level of interest. Stars have no effect

on

notifications or the activity feed. For that, see Repository Watching.

The project has received 39 stars and this number is still growing as more and more developers find out this package. The usefulness and quality of a project is reflected by these stars provided by the developers who are using it.

Starred by

Stargazers

:L;l'

A.

*&*

I -. ._. r .._

i :: :

^

::;

r - -,.--,:.

r . -'-'r -- I

t

&u{

7 .1

.3 Forks

A fork is a copy of a repository. Forking a repository allows you to freely experiment with changes without affecting the original project. Most commonly, forks are used to either propose changes to someone else's project or to use someone else's project as a starting point for your own idea.

&

7 .1

.4 Msitor Graph

The visitor count keeps on rising as days pass by proving the project is reaching more and more developers making this project a success.

r:'- *

a-

-\,=

=5q- "L €-

-'C----

:,2r, ;ts;- ii::. :i:-r :.-z1 l- :i'

.-\

t -l "t

.,, \ ',i

.'\ ',\

".i \ aF_-_r___-**

:- :-i i- ;i l- :,- )-::a

728 ,I2B

t

E*ferrng r:tel

.:

-il

(},

$ ::

' ' i- ,, :',,,

$ ':'- : ",:,: : : : i::j :j;: :

$

:'.: ::,

$ :

.;, :r,:;: :: -,

:

: :::.'

._J I i :i"r'-

Ft1:ltlat ir-rfitefrl

le

f:,t=j

tr

l-a,

is]

+

7.2 Activity on Stack-Overflow

7.2.1 Questions on Stack-Overflow

There are 12 questions on stack-overflow about this project all asked by django developers who were having difiiculties

to

implement

this

package to their django powered site. These questions provided a lot information to help make the project more user-friendly and easier to implement.

This activity on stack-overflow shows this package is receiving traction more and more developers are being interested in using it in their own project.

:.t;.rckoverflow

Search Results

$ S:ac" !!.{!.:#

a-

r

E

60

Dokumen terkait