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
isa
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
showsa
bootstrap date-picker calendarto
selecta
date fromit. lt
validatesthe
DateField in django forms with the formats listed under DATtr_INPUT_FORMATS key.4.4.3 DateTimePickerl
nput 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
showsa
bootstrap date-picker calendarto 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 calendarto
selecta
month fromit. lt
validatesthe
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
nput 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
showsa
bootstrap date-picker calendarto
selecta
year fromit. lt
validatesthe
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 .
DatePickerlnputI .
llmePickerlnput; r
DateTimePickerlnputi .
MonthPickerlnputI .
YearPickerlnput, r
date*Plcker.html; .
time-picker.htmli
--2
-Use-
.
moment-with-locales.min js*
bootstraFdatetimepicker.min.js.
bootslrap-datet!mepicker.mi n.cssl
i
Package Hesources.
datepicker-widget.js.
datep,cker-widget.cssFig 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 neededto
renderthe
date-pickers on screen. They are availablein
widgets since djangoversion
1.'11. Butthis
package includes fallbacksfor
django versionsolder than 1'11' The
following templatesare
includedin the
packagewhich can
be extended on demand..
date-picker.html.
time-picker.html4.5.3 Resources (JavaScripts/CSS)
The package contains both cDN hosted
resourceswhere available and package
inctuded;:t,oo;:t"t
to render the date-picker' The resources inctuded are Javascript and
css
files as listedThe CDN-hosted resources are:
o
moment-withJocal.min.js.
bootstrap-datetimepicker. min.js.
bootstrap-datetimepicker. min.cssThe package-inctuded resources are:
.
datepicker-widget.js.
datepicker-widget.css29
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 -, ,
::,-
3Fi 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
packageis
writtenin
Python3,
and supportsany
latest versionof
django including older django versions backto
1.8.lt
works with both Bootstrap 3 and4. lt
needs jQueryto
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
packagecan be
usedwith any
server capableof
runninga
djangepoweredsite
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 Datepicker4.
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 convertsa
python date-timeformat to a
moment date.time format.3. The formatjs2py
method convertsa
moment date-time formatto a
python date.time format.34
5.1 .5 The Constructor
The init -
methodis the
constructor methodof the
DatePickerBaselnput. Accepts the following arguments1. 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 format4. options:
the options to customize the JavaScript dat+picker instanceThe _calculate_options
is a
internal methodthat
calculatethe
options ofthe
date'picker provided by the user overriding the default optionsThe 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
methodtakes in the event-id of an
eventto
create link-up between two DatePickerlnputs and sets the DatePickerlnput as the start date of the event.2. The end-of
methodtakes in the
event_idof 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 levelso
theycan
be conveniently imported fromthe
package. Sowe will
importthe
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 servicefor
version control usingGit. 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 repository3.
Add a description to the repository that best describes the package4.
Make the repository public for community suggestions and feedbacks5.
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
repositoryof
softvyarefor 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 files1.
Host the package on PyPl for easy instaltation via pip [2].2.
Give the package a unique name that is self-explanatory and search friendly3-
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
plaeeto list
python packagesthat are
specificto
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 development2.
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 PackageI
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
ngo-bootstra p-datepicker-p
Ius wid get co
mpon 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
get 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
bookis
always judged by it's cover. The coverof
arepository
is the
READMEof a
Github repository.The
README should containthe
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 Acknowledgements5.7.1 The lntroduction
dja ngo
-bootstra p-datepi cker- plus
Su I\.Io
Hay 3016
Tu l.!e Th Fr
5u
Ir4 otu5ay 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 testingis a
software testing method by which individual units of source code, setsof
oneor
more computer program modules togetherwith
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
manyof
these toolsare
also usedfor
integration testing by writingthe test
cases to exercise multiple parts of code at once.unittest
is the built-in standard library tool for testing Python code.pytest
isa
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-generationtool that
assists developersin
creatingtests
that exercise edge casesin
code blocks. The best wayto
get started using Hypothesisis
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 usedto
build andtest
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 suggestsit
hasa
lower chanceof
containing undetected sofiware bugs comparedto a
programwith 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::;.:jffiSE
ffi
j--.:::Figure 6.4: coveralls.io report
6.3 Maintainability
Maintainability
is an
estimateof
technicaldebt in the repo
basedon 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.
.
,Argumentcount
- 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 filer ldentical blocks of code -
Duplicate codewhich is
syntactically identical(but may
be formatted differently)o Method complexity -
Functionsor
methodsthat
maybe
hardto
understand (Cognitive Complexity)o
Methodcount
- Classes defined with a high number of functions or methods.
Method length - Excessive lines of code within a single function or methodo
Nestedcontrol 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--::,1i:'-t ;
,:-.-:',j
._ i,,.:i'-i_rl.j::,
, .:
, '. al:
,.',, li55
Project Success
.
7.1 Project Stats on Github
a a a
1,11:..r::*::
7.1.1 Watchers
watching
a
Repository registersthe
userto
receive notificationson
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
featurethat lets
users bookmark repositories. Stars are shown next to repositories to show an approximate level of interest. Stars have no effecton
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
implementthis
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