<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi Radim and friends<div class=""><br class=""></div><div class="">What you have built sounds really cool! Is my understanding correct that with eventual read/write support the idea is that a user connecting via QGIS PostGIS connection would have equivalent permissions to a user created in Django auth, so could for example directly edit a feature in QGIS via PG connection, in QGIS via WFS-T connection or edit a feature in Django via e.g. OpenLayers WFS-T connect to QGIS or in Django via django forms?</div><div class=""><br class=""></div><div class="">If that is the goal that sounds really great! Or do some of the above use cases not apply?</div><div class=""><br class=""></div><div class="">Regards</div><div class=""><br class=""></div><div class="">Tim<br class=""><div class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 25 Oct 2018, at 09:26, Radim Blazek <<a href="mailto:radim.blazek@gmail.com" class="">radim.blazek@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">We (MPA Solutions, <a href="http://www.mpasolutions.it" class="">www.mpasolutions.it</a>) wrote a Django provider for<br class="">QGIS (read only, no editing for now)<br class=""><a href="https://github.com/MPASolutions/django-provider" class="">https://github.com/MPASolutions/django-provider</a>. It is proof of<br class="">concept but it works.<br class=""><br class="">It contains a small test Django project with simple wms Django view<br class="">based on QgsServer, so it should be easy for you to test it. The<br class="">vector provider in Python requires QGIS master(?), I think.<br class=""><br class="">Any contribution is welcome, especially the write access (i.e.<br class="">AddFeatures, DeleteFeatures, ChangeGeometries, ChangeAttributeValues),<br class="">which would enable the editing chain QGIS Desktop <-> WFS-T <-> QGIS<br class="">Server <-> Django provider <-> Django (<-> PostGIS).<br class=""><br class="">Radim<br class="">On Wed, Oct 10, 2018 at 8:19 AM Pēteris Brūns <<a href="mailto:pb@sungis.lv" class="">pb@sungis.lv</a>> wrote:<br class=""><blockquote type="cite" class=""><br class=""><br class="">---- On Mon, 08 Oct 2018 22:27:42 +0300 Radim Blazek <<a href="mailto:radim.blazek@gmail.com" class="">radim.blazek@gmail.com</a>> wrote ----<br class=""><br class="">On Mon, Oct 8, 2018 at 8:47 PM Pēteris Brūns <<a href="mailto:pb@sungis.lv" class="">pb@sungis.lv</a>> wrote:<br class=""><blockquote type="cite" class=""><br class="">Hi all,<br class=""><br class="">Pretty long time ago in similar case we developed django app able to replicate django user and group permissions to PostgreSQL roles and permissions. So each user can use the same user name and passowrd in WEB client and using QGIS/PostgreSQL, manage permissions in django auth app and the same will be replicated in postgresql. Each model is table and django permissions are translated to PostgreSQL role permissions - implementation works also with m2m and related models.<br class=""><br class="">In basic cases such model is OK, but ir more complex implementations we loose logic build around model in django or need to repeat it in QGIS or move to PostgreSQL.<br class=""></blockquote><br class="">This is exactly what we also end up with and what we would like to<br class="">liberate from for the reasons you mentioned. Thank you anyway, at<br class="">least we know that we are not crazy alone.<br class=""><br class=""><br class="">You are not alone! And if you come to some good idea let us know. We would be happy to hear and review opportunity to contribute or contribute with funding of such functionality.<br class=""><br class="">BTW, contextually not exact but similar case is file/attachment upload from QGIS to server using, for example RESTful API. Year ago, in Nodebo, we discussed such functionality with Mathias and Marco.<br class=""><br class="">Peteris<br class=""><br class="">Radim<br class=""><br class=""><br class=""><blockquote type="cite" class="">If this sounds as suitable approach, I believe, we could try to review the code and make open source.<br class=""><br class="">Best,<br class="">--<br class="">Pēteris Brūns<br class="">SunGIS<br class="">+371 26336691<br class=""><a href="mailto:pb@sungis.lv" class="">pb@sungis.lv</a><br class=""><br class=""><br class="">---- On Fri, 05 Oct 2018 23:54:07 +0300 Olivier Dalang <olivier.dalang@gmail.com> wrote ----<br class=""><br class="">Hi Radim,<br class=""><br class="">I didn't get this sorted in the end (ended just having the layer as read only in QGIS from postgis and users would do any modification from django admin).<br class=""><br class="">About a Django provider for QGIS : it is now possible to create python providers [1]. So creating a REST provider to consume a django rest framework endpoint may not be that hard anymore ? That would certainly be a great addition to QGIS !!<br class=""><br class="">And about a WFS-T app for Django : I don't know of any other effort than django-wfs, but I just saw there's an open PR with some a lot of changed including python 3 support, so maybe django-wfs is not as dead as it looks ? Still WFS-T would have to be added, and again not sure how hard this would be...<br class=""><br class="">Let us know how it goes !<br class=""><br class="">Cheers,<br class=""><br class="">Olivier<br class=""><br class="">[1] https://github.com/qgis/QGIS/pull/7012<br class=""><br class=""><br class=""><br class="">On Sat, Oct 6, 2018 at 4:24 AM Radim Blazek <radim.blazek@gmail.com> wrote:<br class=""><br class="">Hi,<br class="">we need the same, to be precise, we need two things, to allow editing<br class="">of data stored in Django/PostGIS in QGIS over the network and let QGIS<br class="">Server (WMS) to read data from Django, both using Django filters etc.<br class="">If we manage to get data to QGIS from Django (and back), we can use<br class="">QGIS Server and WFS-T for editing. So I am looking for something like<br class="">Django provider for QGIS or WFS-T application for Django. Are you<br class="">aware of something like that?<br class=""><br class="">Olivier, what have you used in the end? [1] is not maintained and it<br class="">does not support WFS-T.<br class=""><br class="">Alessandro, in [2] I am missing data reading from Django models. It<br class="">seems like the server is launched from python, but data flow goes<br class="">through standard QGIS providers?<br class=""><br class="">Marco, if I got it looking briefly into GeoNode code, they just run<br class="">QGIS server, but they don't read data directly from Django models,<br class="">right?<br class=""><br class="">[1] https://github.com/vascop/django-wfs<br class="">[2] http://www.itopen.it/qgis-server-binding-news/lang-pref/en/<br class=""><br class="">Radim<br class=""><br class="">On Fri, Mar 24, 2017 at 1:56 PM Marco Bernasocchi <marco@opengis.ch> wrote:<br class=""><blockquote type="cite" class=""><br class="">Hi Olivier<br class="">Kartoza has been working on having geonode server running smoothly using<br class="">a qgis server in the background.<br class=""><br class="">have a look at<br class="">https://www.youtube.com/watch?v=GzX4byPkV3E<br class="">http://osgeo-org.1560.x6.nabble.com/New-Geonode-GeoSAFE-and-QGIS-work-td5303864.html<br class=""><br class="">cheers<br class="">Marco<br class=""><br class="">On 24.03.2017 13:10, Olivier Dalang wrote:<br class=""><blockquote type="cite" class="">Dear List,<br class=""><br class="">Does anybody here have some experience with making QGIS work with<br class="">(Geo)Django ?<br class=""><br class="">I would love to be able to make them communicate, as QGIS is the<br class="">interface of choice to do complex work on geometries and Django is<br class="">perfect to quickly setup a complete endpoint with user management, model<br class="">logic and web administration interface.<br class=""><br class="">I see two approches :<br class="">- Using Django REST framework to create a REST endpoint - but is there a<br class="">way to consume REST endpoints in QGIS ?<br class="">- Developing a WFST module for Django, for which there seem to be some<br class="">work done [1] for the non-transactionnal part.<br class=""><br class="">I just wanted to ask before reinventing the wheel !<br class=""><br class="">Bests,<br class=""><br class="">Olivier<br class=""></blockquote></blockquote><br class="">_______________________________________________<br class="">QGIS-Developer mailing list<br class="">QGIS-Developer@lists.osgeo.org<br class="">List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer<br class="">Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer<br class=""><br class=""><br class=""><br class=""></blockquote><br class=""><br class=""><br class=""></blockquote>_______________________________________________<br class="">QGIS-Developer mailing list<br class=""><a href="mailto:QGIS-Developer@lists.osgeo.org" class="">QGIS-Developer@lists.osgeo.org</a><br class="">List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer<br class="">Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer</div></div></blockquote></div><br class=""><div class="">
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-position: normal; font-variant-caps: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-weight: normal; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; line-height: normal; text-align: center;" class=""><span>—</span></div><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-position: normal; font-variant-caps: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; letter-spacing: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; line-height: normal; text-align: center;" class=""><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class=""></div><br class="Apple-interchange-newline" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;"><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;"><span><span><span><span><span><span><span><span><span><span><img apple-inline="yes" id="6E258E76-002D-4D5B-AFA8-E41657413270" src="cid:1A5DF6DE-E302-4C28-BFBD-29663CBF1351" class=""></span><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class="Apple-interchange-newline"><br class="Apple-interchange-newline"><br class="Apple-interchange-newline"><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">Tim Sutton</b></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">Co-founder:</b><span class="Apple-converted-space"> </span>Kartoza</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">Ex Project chair:</b><span style="font-weight: normal;" class=""><span class="Apple-converted-space"> </span><a href="http://QGIS.org" class="">QGIS.org</a></span></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">Visit <a href="http://kartoza.com/" class=""><span style="-webkit-text-stroke-color: rgb(71, 135, 255);" class="">http://kartoza.com</span></a> to find out about open source:</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">Desktop GIS programming services</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">Geospatial web development</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">GIS Training</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">Consulting Services</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">Skype</b>: timlinux </div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">IRC:</b><span class="Apple-converted-space"> </span>timlinux on #qgis at <a href="http://freenode.net" class="">freenode.net</a></div>
</span></span></span></span></span></span></span></span></span></span></div>
</div><br class=""></div></div></body></html>