From e2481533edc736bdf782631e2e4337d5ef4cca3a Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Wed, 5 Jul 2017 22:09:24 +0300 Subject: [PATCH 01/28] add requirements.txt --- requirements.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..20e25ec --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Django==1.11.3 From 2ca92d4633b292fcf5b523866732d5e7e8710fff Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Wed, 12 Jul 2017 20:37:31 +0300 Subject: [PATCH 02/28] init django project --- .idea/misc.xml | 2 +- .idea/untitled.iml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 89f7d3c..0cbbe1f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/.idea/untitled.iml b/.idea/untitled.iml index 6711606..bc03bb4 100644 --- a/.idea/untitled.iml +++ b/.idea/untitled.iml @@ -2,7 +2,7 @@ - + From 6be364579e364386ee43b50d68b5d4f5ee8aae9f Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Wed, 12 Jul 2017 21:29:48 +0300 Subject: [PATCH 03/28] create models: Catalog, Article --- something/db.sqlite3 | Bin 0 -> 159744 bytes something/manage.py | 22 ++++ something/simpleDjango/__init__.py | 0 something/simpleDjango/admin.py | 7 + something/simpleDjango/apps.py | 5 + .../simpleDjango/migrations/0001_initial.py | 33 +++++ .../migrations/0002_auto_20170712_1812.py | 21 +++ .../migrations/0003_auto_20170712_1814.py | 21 +++ .../migrations/0004_auto_20170712_1818.py | 21 +++ .../migrations/0005_article_catalog.py | 21 +++ something/simpleDjango/migrations/__init__.py | 0 something/simpleDjango/models.py | 23 ++++ something/simpleDjango/tests.py | 3 + something/simpleDjango/views.py | 3 + something/something/__init__.py | 0 something/something/settings.py | 121 ++++++++++++++++++ something/something/urls.py | 21 +++ something/something/wsgi.py | 16 +++ 18 files changed, 338 insertions(+) create mode 100644 something/db.sqlite3 create mode 100755 something/manage.py create mode 100644 something/simpleDjango/__init__.py create mode 100644 something/simpleDjango/admin.py create mode 100644 something/simpleDjango/apps.py create mode 100644 something/simpleDjango/migrations/0001_initial.py create mode 100644 something/simpleDjango/migrations/0002_auto_20170712_1812.py create mode 100644 something/simpleDjango/migrations/0003_auto_20170712_1814.py create mode 100644 something/simpleDjango/migrations/0004_auto_20170712_1818.py create mode 100644 something/simpleDjango/migrations/0005_article_catalog.py create mode 100644 something/simpleDjango/migrations/__init__.py create mode 100644 something/simpleDjango/models.py create mode 100644 something/simpleDjango/tests.py create mode 100644 something/simpleDjango/views.py create mode 100644 something/something/__init__.py create mode 100644 something/something/settings.py create mode 100644 something/something/urls.py create mode 100644 something/something/wsgi.py diff --git a/something/db.sqlite3 b/something/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..ffaad6026007ee3c90eb87af09565d40e9423a3e GIT binary patch literal 159744 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 ' + self.title + + +class Catalog(models.Model): + parent_catalog = models.ForeignKey('Catalog', verbose_name='Родительский каталог', + default='/', blank=True, null=True) + title = models.CharField(max_length=200, verbose_name='Название', primary_key=True) + index_page = models.CharField(verbose_name='Ссылка на индексную страницу', max_length=200) + + def __str__(self): + return str(self.parent_catalog) + ' --> ' + self.title diff --git a/something/simpleDjango/tests.py b/something/simpleDjango/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/something/simpleDjango/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/something/simpleDjango/views.py b/something/simpleDjango/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/something/simpleDjango/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/something/something/__init__.py b/something/something/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/something/something/settings.py b/something/something/settings.py new file mode 100644 index 0000000..36af317 --- /dev/null +++ b/something/something/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for something project. + +Generated by 'django-admin startproject' using Django 1.11.3. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'vuu(v+nj375e)$^v!_t73o06=iuz@$x051!=iu%$kh@xoz=hb+' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'simpleDjango', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'something.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'something.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/1.11/topics/i18n/ + +LANGUAGE_CODE = 'RU-ru' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/something/something/urls.py b/something/something/urls.py new file mode 100644 index 0000000..13b70a8 --- /dev/null +++ b/something/something/urls.py @@ -0,0 +1,21 @@ +"""something URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url +from django.contrib import admin + +urlpatterns = [ + url(r'^admin/', admin.site.urls), +] diff --git a/something/something/wsgi.py b/something/something/wsgi.py new file mode 100644 index 0000000..902b621 --- /dev/null +++ b/something/something/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for something project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "something.settings") + +application = get_wsgi_application() From c84a4c7aec8e1b00daa6581d27c94923f9680fd5 Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Wed, 12 Jul 2017 21:57:31 +0300 Subject: [PATCH 04/28] some changes look of admin panel --- something/db.sqlite3 | Bin 159744 -> 159744 bytes something/simpleDjango/admin.py | 14 ++++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/something/db.sqlite3 b/something/db.sqlite3 index ffaad6026007ee3c90eb87af09565d40e9423a3e..22bd2c4c5adf122c7310d3f840d6e60a862f4233 100644 GIT binary patch delta 1480 zcma)+U1(fI6vtVprVwAfQ4E=DhNiwJ~%TQHr*|V^YCNt z+?oIRpL@>SBOB_G4fVr39zXWz9z5PW@U;F=_F;vX*gy6PP8~g`ubtEJGlysv77(0; z_u(ikz(4RO{0?{EM_7j+;3`~(OK=`m;4AnXPQWMd5q!{GdLG7t1mhi9$&6%LFqD!U zkW5M@BtbGR8S~Gc!Y}f$%LwklU+@R~20!tDH{m*5gDdbY5BUvz4QHSUU-Gag;Zyh+ zmYYla!BB{bvjQ1`v_MK=Kp-iQ5CDO=Ky2;OdHiI8Wc28$jq`#&>|~)-+Ev(F znVu~ea@xPA;n!Pu@G+Zt)YVMKuwAQ>QBkQbC2M`d|DuKS87b8FrY3cswW()2nnNAt z+SRm*MqZXWm7dY-i%Gej4HYSt=VF$njZ&L2b2_D>p{f*n^{s;i|6~gn{T(-P!hf%g z2h)5jqnc%vUDKQ&P*Hvlp7M{k@Ng|KakyB0qcS@+Su1*l!^PL9CueF6KAk8Ys=PTl zJHNkLnXk;uO%?YoEbI#zlsP5pl$cRqWzTXw>S%n8TJ(h^mo0T2@KfD9{I}b9IBu0a z+tOU-P*#2};d|?NY>}^7u4XW1QI~>>U?-08Qt92JI_VEt_6$>Frb!*U9#>J$!BhN% zEFs%Iwp~~D9~nONKT>o&%ht*+E05A$G2u|Ac%MT*zK#c@mg5<&#zq~-bk@dO`1DYi zKpVj(wBhHKR{#`=;20h)kHHpot~$GUO`?Z=ATU+ngU=uD&IIxKBoKya7;8!qt7R$*_3==cGXBuz@V-$)=y zM%3O|B5ws&5!~Xxohz`)B|n3SM}o>wGA}%C`PB8TNlH=j$y|4}<0=|Za!J(r2D%<4 u-6y8&Vc6sWE+W`~U*IBK;{i^?7?2@ZwJo9GeN|MpYec$JLlj9Q&&R)P@_{@6 delta 1041 zcmZp8z}fJCbAmLZ+e8^>Mz@U#uKH{|;w;R@jMFCuF$y>D)8D>NpV6&=jfa0H1OLwH z0t*<$HVY=qfQh82G;d zHNN5B{*9lBTY#T|fq|L-4aAN&{NI66clf8@=V#&+HDqRCW?*DuW@g~z1*&4?O=93p z+SnMuTi+_p$R^)eY%Cd^pPO2ek(rmCmYA8Eo1Bq`4IegG-YXk`qf3iy?;bFtJDqGJx4e`uaSKaGs&QKFA_w{` Date: Wed, 12 Jul 2017 23:31:13 +0300 Subject: [PATCH 05/28] fix models --- something/db.sqlite3 | Bin 159744 -> 159744 bytes something/simpleDjango/admin.py | 4 ++-- something/simpleDjango/models.py | 8 ++++---- something/simpleDjango/views.py | 2 ++ something/something/tamplates/index.html | 11 +++++++++++ something/something/urls.py | 1 + something/something/views.py | 9 +++++++++ 7 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 something/something/tamplates/index.html create mode 100644 something/something/views.py diff --git a/something/db.sqlite3 b/something/db.sqlite3 index 22bd2c4c5adf122c7310d3f840d6e60a862f4233..fe9dee5039f8fefc35f72c4ccd1ee440fb670286 100644 GIT binary patch delta 1973 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 MaVXIsQRB(;KU=!jfB*mh diff --git a/something/simpleDjango/admin.py b/something/simpleDjango/admin.py index dd8cd78..b4fa67a 100644 --- a/something/simpleDjango/admin.py +++ b/something/simpleDjango/admin.py @@ -4,8 +4,8 @@ class ArticleLook(admin.ModelAdmin): - list_display = ('title', 'catalog', 'date') - list_filter = ['catalog', 'date'] + list_display = ('title', 'catalog', 'date', 'is_index') + list_filter = ['catalog', 'date', 'is_index'] class CatalogLook(admin.ModelAdmin): diff --git a/something/simpleDjango/models.py b/something/simpleDjango/models.py index 61b4902..9adb742 100644 --- a/something/simpleDjango/models.py +++ b/something/simpleDjango/models.py @@ -4,10 +4,11 @@ class Article(models.Model): - catalog = models.ForeignKey('Catalog', verbose_name='Каталог', default='/') - title = models.CharField(verbose_name='Название', max_length=200, primary_key=True) + catalog = models.ForeignKey('Catalog', verbose_name='Каталог') + title = models.CharField(verbose_name='Название', max_length=200) article_text = models.TextField(verbose_name='Текст') date = models.DateTimeField(verbose_name='Дата') + is_index = models.BooleanField(verbose_name='Индексная?') def __str__(self): return str(self.catalog) + ' --> ' + self.title @@ -16,8 +17,7 @@ def __str__(self): class Catalog(models.Model): parent_catalog = models.ForeignKey('Catalog', verbose_name='Родительский каталог', default='/', blank=True, null=True) - title = models.CharField(max_length=200, verbose_name='Название', primary_key=True) - index_page = models.CharField(verbose_name='Ссылка на индексную страницу', max_length=200) + title = models.CharField(max_length=200, verbose_name='Название') def __str__(self): return str(self.parent_catalog) + ' --> ' + self.title diff --git a/something/simpleDjango/views.py b/something/simpleDjango/views.py index 91ea44a..00cf670 100644 --- a/something/simpleDjango/views.py +++ b/something/simpleDjango/views.py @@ -1,3 +1,5 @@ from django.shortcuts import render # Create your views here. + + diff --git a/something/something/tamplates/index.html b/something/something/tamplates/index.html new file mode 100644 index 0000000..7e43113 --- /dev/null +++ b/something/something/tamplates/index.html @@ -0,0 +1,11 @@ + + + + + HTML5 + + +

Simple Django

+ Авторизация + + \ No newline at end of file diff --git a/something/something/urls.py b/something/something/urls.py index 13b70a8..18eb602 100644 --- a/something/something/urls.py +++ b/something/something/urls.py @@ -17,5 +17,6 @@ from django.contrib import admin urlpatterns = [ + # url(r'^', views.home), url(r'^admin/', admin.site.urls), ] diff --git a/something/something/views.py b/something/something/views.py new file mode 100644 index 0000000..8c3b0ce --- /dev/null +++ b/something/something/views.py @@ -0,0 +1,9 @@ +from django.shortcuts import render +from django.contrib import auth + +# Create your views here. + + +def home(request): + return render(request, 'index.html', + {'username': auth.get_user(request).username}) \ No newline at end of file From d5a90aab80325e06d6f9ddc755f5900920b05380 Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Thu, 13 Jul 2017 00:02:05 +0300 Subject: [PATCH 06/28] fix models --- something/db.sqlite3 | Bin 159744 -> 159744 bytes something/simpleDjango/models.py | 12 ++++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/something/db.sqlite3 b/something/db.sqlite3 index fe9dee5039f8fefc35f72c4ccd1ee440fb670286..99069febb302aff6842f4fb8da949a8d77c5da72 100644 GIT binary patch delta 837 zcmZvbPe>F|9LL|A+1;7hoc*okuAx@zmXzeKZ)SHKcZ16C7Ni*wvdAi~)t3Katqido z4|Oo2VGncY6xul#$pxjAgzDgBOes2Kf`<%@GWuf_(VMMXKaps?AEoX*4LqHb*y%<$r!kVXR>5qyF*FzJd}C@W!YNX7r%g)!C+F{N4F$83P!$cqfc Yt;?~8hM&@FFxkjF11w}0;!ME(3*wgRg8%>k delta 421 zcmW-dziU%b6vywm_uamiXx{e~V-=%F{DBn{lD0b3A-H8orDCzGrA~DzY2%MBlIzeV z9hwHb|3Hi2B9B1d;81iBaZ*z{N=k=Bj6W#0MeN|w1K%^8&pGh@o@zT*ZO4{V{RJV! zCDuijV$IYuBUA{dR-uydPQwi@hbD?QJEu~5peS5q1-@VnuP}or$YLDD&>V+833ZL^ zcA1h|Vo7+7Qf{_SpK#O&+4^ld)@bE2lzf_B&lBCq(oGSFNr5~5o5X(N%F* z?Y;F9?gw{NO!ht2!_J}}))TZ!YE` zkd#qqCP>nB-MsMVkn?awixt`>WeQ{V-8^kX*B{aQL0@A>V2{J>;17N@`=>s_{)BXF z=OvwC+7&p&0e0~XU8Y-zx*K#l@U>qP9RD89`I~+%Gz)%I`%DW%p2Wfb6JGv`n4<(q vr9|vG ' + self.title + return self.title class Catalog(models.Model): - parent_catalog = models.ForeignKey('Catalog', verbose_name='Родительский каталог', - default='/', blank=True, null=True) + parent_catalog = models.ForeignKey('Catalog', verbose_name='Родительский каталог', blank=True, null=True) title = models.CharField(max_length=200, verbose_name='Название') def __str__(self): - return str(self.parent_catalog) + ' --> ' + self.title + return '{} --> {}'.format(str(self.parent_catalog), self.title) From 6541a5885561f596933c6b835c57142035cb1ab5 Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Mon, 17 Jul 2017 23:32:48 +0300 Subject: [PATCH 07/28] add model: User (must be changed) --- something/db.sqlite3 | Bin 159744 -> 188416 bytes something/simpleDjango/admin.py | 5 +- .../simpleDjango/migrations/0001_initial.py | 17 ++++-- .../migrations/0002_auto_20170712_1812.py | 21 ------- .../migrations/0003_auto_20170712_1814.py | 21 ------- .../migrations/0004_auto_20170712_1818.py | 21 ------- .../migrations/0005_article_catalog.py | 21 ------- something/simpleDjango/models.py | 53 +++++++++++++++--- 8 files changed, 60 insertions(+), 99 deletions(-) delete mode 100644 something/simpleDjango/migrations/0002_auto_20170712_1812.py delete mode 100644 something/simpleDjango/migrations/0003_auto_20170712_1814.py delete mode 100644 something/simpleDjango/migrations/0004_auto_20170712_1818.py delete mode 100644 something/simpleDjango/migrations/0005_article_catalog.py diff --git a/something/db.sqlite3 b/something/db.sqlite3 index 99069febb302aff6842f4fb8da949a8d77c5da72..67716faaddd4b0292907d10cb743af213c976c01 100644 GIT binary patch delta 3303 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 V7Zs_Fl{47uT!o99rwZQF{sVdI&p!YF delta 2986 zcmai0Yi!%r73L)=OO!2NtBxI~en@_#i{V+myd*_ZZJOBe+9a(kJATBHS1YO|$C54C zvF!QLbvBD(7?%8~N}w9BA8nIuK-Z#)YP1I0ChY=j1=jsgyI{cvYzdYhd!TKSuFW=N zSavDJiDVn7KptKmo%89t=brCgt$t9tdX;;=*4|A~)Hlezo7@b!zRyp!n)E`WukUJ+?kBVXQm?E zu~6dpG(t!ThUVv{gBbBLl6g!95;k7ik=)K>Cq^Dg@F3YGsn{)xT|2hJkhfr9u^0o3 zo)rU?7#y-uD2(kTy?73WjFqqGMB$;8gjHTw>h1<@D(qc0 z2+3I0zgxG*o-23Wi)B?2B>k?bG}8{kIUxme6A6-z<94!) zu;Cq>PRvCTbHTZ#nTSQd)X}!9%1ZQUfqn{p4nKl_gy-SQ@Fbjt{*2ZMb^pHCc39vr z1wVs-fWLw7!I$8V;0ZXK(e^`q*!Mb9Q(mi^d-;rZ&9+uMdUpTNvNWT_mt-L}i%x`& zpGeLwqhu^PF5z)3jfVxfCw62i&^@^1JsODnai8Rk4~l`K-Ua`%f6*J8hy~((3q9SF z3*J~C?_HjV_H-YP^>pjbmre~F!hwOVSb#ixVttYy2cm)4;VIw1;Yn|7DDE2=;{!3j z=*Ne!H`X)Rb95-?kBte35@_#+V6fZRKd|JHWS58~=IR%gU&|DNSAf>f4|Sr1y;iJ#8HY z5^Jlb>QkM&O0^iY?9><)JlC8~4THM$Y5=sP_Xfaemh_UC($M;Y1K@{X{gYA9VQ;73 zqAI`z3J#WEwB53`l{J<=Vg0G)KbBuxZ04+4HDUG#-~#h2aKY3MexK1A0nMl>EzW3j zed)5ZvCSkE#X;0$9ijM*?HhA|mNzj>vSsVN&tn?C@g z1)Iy(M}7-lWvV$_lp>qV7;GxPRDQA?+5T<&i7lGZe6|(DaTKfvcEEMwWH^+&=#i() z8-g&pkM|(t;oUB>JJ^O4S_)6}$7CnOGB8Q~JBeyw+Zt&THUYK|{4=XNFk|ja)myo=pTpP&~ zdZrT*XM6jj&i?t_Bl}ABTsGs(zLP!o@pEMOZuUZUjc^Tx!z+2Jgp{Rl#)uH|2%^hv z95T}5CW0+&k4-9;N4f`8R64SkC?2G`u;5l@`AL=l?acw&EH|qEHE^;=A}b*X zlA!Ek2wZa^Tn=p$z@~{|*(11JiiDAZhUgW7(3eBt?^VqkiYA*+C}B7M6#~K)blkqnt&O9dRxfdM7*EE7gkv-12u|l3TL2}(UNe*$(X51 zyTAcMXQASTGx|iLAEM1veWhRl8{I%8xhYQehypDDGu7HGa9r^UZDbMrEm=IeOV<8> D0lW?z diff --git a/something/simpleDjango/admin.py b/something/simpleDjango/admin.py index b4fa67a..2b353ef 100644 --- a/something/simpleDjango/admin.py +++ b/something/simpleDjango/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Article, Catalog +from .models import Article, Catalog, User # Register your models here. @@ -14,4 +14,5 @@ class CatalogLook(admin.ModelAdmin): admin.site.register(Article, ArticleLook) -admin.site.register(Catalog, CatalogLook) \ No newline at end of file +admin.site.register(Catalog, CatalogLook) +admin.site.register(User) \ No newline at end of file diff --git a/something/simpleDjango/migrations/0001_initial.py b/something/simpleDjango/migrations/0001_initial.py index d00b8fa..28b05b5 100644 --- a/something/simpleDjango/migrations/0001_initial.py +++ b/something/simpleDjango/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-12 18:04 +# Generated by Django 1.11.3 on 2017-07-17 19:06 from __future__ import unicode_literals from django.db import migrations, models @@ -17,17 +17,24 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Article', fields=[ - ('title', models.CharField(max_length=200, primary_key=True, serialize=False, verbose_name='Название')), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200, verbose_name='Название')), ('article_text', models.TextField(verbose_name='Текст')), ('date', models.DateTimeField(verbose_name='Дата')), + ('is_index', models.BooleanField(verbose_name='Индексная?')), ], ), migrations.CreateModel( name='Catalog', fields=[ - ('title', models.CharField(max_length=200, primary_key=True, serialize=False, verbose_name='Название')), - ('index_page', models.CharField(max_length=200, verbose_name='Ссылка на индексную страницу')), - ('parent_catalog', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='simpleDjango.Catalog', verbose_name='Родительский каталог')), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200, verbose_name='Название')), + ('parent_catalog', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='simpleDjango.Catalog', verbose_name='Родительский каталог')), ], ), + migrations.AddField( + model_name='article', + name='catalog', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='simpleDjango.Catalog', verbose_name='Каталог'), + ), ] diff --git a/something/simpleDjango/migrations/0002_auto_20170712_1812.py b/something/simpleDjango/migrations/0002_auto_20170712_1812.py deleted file mode 100644 index 5588b3d..0000000 --- a/something/simpleDjango/migrations/0002_auto_20170712_1812.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-12 18:12 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('simpleDjango', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='catalog', - name='parent_catalog', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='simpleDjango.Catalog', verbose_name='Родительский каталог'), - ), - ] diff --git a/something/simpleDjango/migrations/0003_auto_20170712_1814.py b/something/simpleDjango/migrations/0003_auto_20170712_1814.py deleted file mode 100644 index 135039b..0000000 --- a/something/simpleDjango/migrations/0003_auto_20170712_1814.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-12 18:14 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('simpleDjango', '0002_auto_20170712_1812'), - ] - - operations = [ - migrations.AlterField( - model_name='catalog', - name='parent_catalog', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='simpleDjango.Catalog', verbose_name='Родительский каталог'), - ), - ] diff --git a/something/simpleDjango/migrations/0004_auto_20170712_1818.py b/something/simpleDjango/migrations/0004_auto_20170712_1818.py deleted file mode 100644 index c4dc5da..0000000 --- a/something/simpleDjango/migrations/0004_auto_20170712_1818.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-12 18:18 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('simpleDjango', '0003_auto_20170712_1814'), - ] - - operations = [ - migrations.AlterField( - model_name='catalog', - name='parent_catalog', - field=models.ForeignKey(blank=True, default='/', null=True, on_delete=django.db.models.deletion.CASCADE, to='simpleDjango.Catalog', verbose_name='Родительский каталог'), - ), - ] diff --git a/something/simpleDjango/migrations/0005_article_catalog.py b/something/simpleDjango/migrations/0005_article_catalog.py deleted file mode 100644 index ba36498..0000000 --- a/something/simpleDjango/migrations/0005_article_catalog.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-12 18:23 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('simpleDjango', '0004_auto_20170712_1818'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='catalog', - field=models.ForeignKey(default='/', on_delete=django.db.models.deletion.CASCADE, to='simpleDjango.Catalog', verbose_name='Каталог'), - ), - ] diff --git a/something/simpleDjango/models.py b/something/simpleDjango/models.py index a182853..a22af7f 100644 --- a/something/simpleDjango/models.py +++ b/something/simpleDjango/models.py @@ -1,15 +1,17 @@ from django.db import models from django.core.exceptions import ValidationError +from django.utils.translation import ugettext_lazy as _ +from django.contrib.auth.models import AbstractUser, Group, Permission, AbstractBaseUser, UserManager # Create your models here. class Article(models.Model): - catalog = models.ForeignKey('Catalog', verbose_name='Каталог') - title = models.CharField(verbose_name='Название', max_length=200) - article_text = models.TextField(verbose_name='Текст') - date = models.DateTimeField(verbose_name='Дата') - is_index = models.BooleanField(verbose_name='Индексная?') + catalog = models.ForeignKey('Catalog', verbose_name=_('catalog')) + title = models.CharField(_('title'), max_length=200) + article_text = models.TextField(_('article text')) + date = models.DateTimeField(_('date')) + is_index = models.BooleanField(_('home page?')) def clean(self): if self.is_index and Article.objects.filter(catalog=self.catalog, is_index=True).exclude(id=self.id).exists(): @@ -20,8 +22,43 @@ def __str__(self): class Catalog(models.Model): - parent_catalog = models.ForeignKey('Catalog', verbose_name='Родительский каталог', blank=True, null=True) - title = models.CharField(max_length=200, verbose_name='Название') + parent_catalog = models.ForeignKey('Catalog', verbose_name=_('catalog'), blank=True, null=True) + title = models.CharField(_('title'), max_length=200) def __str__(self): - return '{} --> {}'.format(str(self.parent_catalog), self.title) + return '{0} --> {1}'.format(self.parent_catalog, self.title) + + +class User(AbstractBaseUser): + birth_date = models.DateField(_('birthday')) + groups = models.ManyToManyField(Group, _('group')) + user_permissions = models.ManyToManyField(Permission, _('permissions')) + is_superuser = models.BooleanField() + + objects = UserManager() + + USERNAME_FIELD = 'email' + REQUIRED_FIELDS = [] + + class Meta: + verbose_name = _('user') + verbose_name_plural = _('users') + + def get_full_name(self): + ''' + Returns the first_name plus the last_name, with a space in between. + ''' + full_name = '%s %s' % (self.first_name, self.last_name) + return full_name.strip() + + def get_short_name(self): + ''' + Returns the short name for the user. + ''' + return self.first_name + + def email_user(self, subject, message, from_email=None, **kwargs): + ''' + Sends an email to this User. + ''' + send_mail(subject, message, from_email, [self.email], **kwargs) From 166ef8539599ef9c38ecbef903196f6832cc1938 Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Wed, 19 Jul 2017 22:46:51 +0300 Subject: [PATCH 08/28] fix models --- something/db.sqlite3 | Bin 188416 -> 200704 bytes something/simpleDjango/admin.py | 4 +-- something/simpleDjango/models.py | 46 +++++++++++++++++++++---------- something/something/settings.py | 1 + 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/something/db.sqlite3 b/something/db.sqlite3 index 67716faaddd4b0292907d10cb743af213c976c01..4f195124beffff47d49e45de95500ada6a8b4b8d 100644 GIT binary patch delta 1227 zcmZvaZD?Cn7{~AP+`Qb}q`9fBxqTVyWm4O?HM#dDH*d3cP1m(*iLErsa4yMcogIDC zB{sUS_D+W|EH(su{GyDaX_vMeG0=Vxao+?{te^;f68t1iDkA#Dx0|A4wdL>}IOjR% zcmB`+JPWt&3)dY>t@VQp!zf0`MxYU&7LNI0u#$RDU|VcsMXSr>;H&%$f7EuzwrU%z z=$*FtSc{oyKi+$BVrq7B{N#o7^!XWCR{Y6yHZzk{WhEqslt@yEsDav|OAd7@5lM+e z)j(7Zc_RT$2?k@$2Qk!r3|ZUDkhSQ%<~JbWfF^f084%_FLX>3o;`ocZ({y@j{NDTF zs1}JTey<$TLRvT`9;89uqakDzq^WlqAxV|zqna93RBuR?BWf__J^&&|_CW&SJ&=DH z!LS;Uwb=a!F~a*9!5YK8>u62Me~^F@j)bbex73+ic;}8q_(6yZCE;V?vY-iLg4?+x zED1{${Y$60y^9^;NMFMv=2j2e%~9_PHkpJ)@qyx-KCu}0iO^nr&ezc_e8n_+Ss!=r zC+}KXEcs4D%N2Q31~}1W9bp{i0mf3YG?)hj&3Uvg;kapM`E6dbeQWFE7P&?CES`i3 zCeLIldb4?JAPYR27zTbR=w*ac6+H%9eJ{gDZvkJ06f19;PT(Is%L}d#X2I2g*BB?W z%s4lld|iX%N&9jBw5`PbY@N1@nscUW%rc&;je`D){Z&avtLXE=)fqaxif)?Rzr=CG4a>p8}qSN~m!!S;b^G=p*!38AZBYLLV)y82E2W_$-&TikG_KO2gfx zKtDZgh}mAjI?5Tn0S{4O1+PMe#8rG49<047)hHGkIs?zpopn4!AD)3It3NVDkKe@G zFiDPE_$#Y>CTMgH%Fco3t)iyEYf2`4ZgQMbbI?dq&N#M~Gk)Ov93<_>q$9K0bIGxE vW}IHggPY#S!6Ee28shJ^s+9UpC@e`vOB9B!W-to&R_jwcLSfjvJnQ-gs_tYK delta 631 zcmXw$Ur1AN6vyv5cXxO9&h5AG=FLCoO(d!>R-h^@NP6u!MkT`QCrQ1tr7RmuZ`NYBB!v$G0ENL3g)@w-|`Wu(xHg8_PfGX z##j<$qwcb(#{6JJ=(UBVwBHRfm0MT_)$~1y8f{x>r@d})(u9RNbdqIZJ2hE&f=W~9 zhYspZVGmT%Clf0U+%qXGBij<5fiN{J;W;=-ztUJt9Z3`p9Kl}bq4rl;LT`KFEN={l z=+OcWf;Y!JO)t8@O?nbrp`E6a7^9s9tR-e*Knglkqp%ZZ!@0OBH7=ruJQ0xSv59{A zmP7}AG4VNEqOnEnppRyDv6KB*4qiy%9=MX@MrC8_qNw_OaPKIs%wq){KZv+Jk7=9N ZXlSFzGHybE3RdtB$m {1}'.format(self.parent_catalog, self.title) -class User(AbstractBaseUser): - birth_date = models.DateField(_('birthday')) - groups = models.ManyToManyField(Group, _('group')) - user_permissions = models.ManyToManyField(Permission, _('permissions')) - is_superuser = models.BooleanField() +class User(AbstractBaseUser, PermissionsMixin): + birth_date = models.DateField('Дата рождения') + groups = models.ManyToManyField(Group, 'Группы') + user_permissions = models.ManyToManyField(Permission, 'Права') + is_superuser = models.BooleanField('Суперпользователь?') + is_active = models.BooleanField('Активный?') + email = models.EmailField('E-mail', unique=True) + first_name = models.CharField('Имя', max_length=30) + last_name = models.CharField('Фамилия', max_length=30) + username = models.CharField('Логин', max_length=30) objects = UserManager() @@ -48,7 +64,7 @@ def get_full_name(self): ''' Returns the first_name plus the last_name, with a space in between. ''' - full_name = '%s %s' % (self.first_name, self.last_name) + full_name = '{0} {1}'.format(self.first_name, self.last_name) return full_name.strip() def get_short_name(self): diff --git a/something/something/settings.py b/something/something/settings.py index 36af317..6403d7a 100644 --- a/something/something/settings.py +++ b/something/something/settings.py @@ -114,6 +114,7 @@ USE_TZ = True +AUTH_USER_MODEL = 'simpleDjango.User' # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ From 18510029ffe26d566c2968db6106648b7f82a2e5 Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Wed, 19 Jul 2017 23:20:47 +0300 Subject: [PATCH 09/28] change auth_user_model --- something/db.sqlite3 | Bin 200704 -> 208896 bytes something/simpleDjango/admin.py | 7 ++++++- something/simpleDjango/models.py | 17 +++++++++-------- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/something/db.sqlite3 b/something/db.sqlite3 index 4f195124beffff47d49e45de95500ada6a8b4b8d..73e93cb1eca586c8a1529a3f6c620afdfc2c5adf 100644 GIT binary patch delta 1788 zcmah~eN0nV6o2==N84B0UJy#Dz(9hcL)!PjgO z?(cWcJ@=gR4vrfRUN;=d%WPv9My4WBVX54TuarUC^wxKfaSv5<@{M%N*IgddW+)tA zq`N$gkLX}+{@BjNS)!=42L}iG+9g4(5~@TeT?mS*lnYhmqO(X6ss*K5bl56|DyJgU z=A}>-Pokv9P*Sxl+MKc?I-IqORn+XT^<_DkYWTutR#-de?~cZL!tO}0x3jN(us^&D=2fsYI?|kgxmxtP zMPL;jaZSPOF|XaM;c}O<3LwE#R3Eix<)E*aoQ0&SHa21RgZvrci{4EGv7k~l6qDs` za$o0=v#U3#ICgb*D*a(8Bo6fqG;QpV0vp$Nd+S^Fc-&n*9=AsfMEt}4h+p(X)^z(v zHbnvv*NC?@5b;DBhML?yG2k96dhfN34SPJT-iRmas|dJVvR`VDz0npa5cT%>qYV}Q z5pTpB4Ri(EJ>5;MYbc3F^o|6&8+wJBlye>Bf}}o)SXHeEwhGZHIHZ~J>uAaU*=(Ez zvH8N8i`+qW5%?^rZ3dqJGO-&>CS&VCyr5i@V2o+?tR^e19x0|Wqt7sv&gw7fE&L_^ zSzV*{Rd_YknSIQ_G=3X$6k&taXhE$KgRL*$@)Ri4zwu;e;dbFlj~2xIgoS@ zgLBIa9J@UjxuV*_3n}L27Y@IJW8Y`NKfs8V4k}-l9 z%Wi>Z(k8jj4RZ!)V$+M!SrF4}`7&J%h@rFSEW?1q)7TBT7gph1vhxINCby?xK50G< zt)!_9v=Yw;a4UybU@b9D!AXcUWNr#pfEDDYDcDMGoTi&=Ps4Y0E2xt-=b3`I%gW() zyohW*3ERLja$y3NlDi40AqP*wLc&c#C&ZcLnMt?`*i@1{^{}+mmd4GXO+7K6e6$%< zbLrc`$TVgFU9iu^aUX{xIFGz>4BiHd$-d+8k{(-i7Hn++FEo)e31}g!PrwY4;R8H* za{^w|x^Rxh;jfcN`FzoX063;2QOL4hvTpm zl&3CvcO1S#M&F0~$r5UZw#esgXz|q%+dfc0(vHI1bYElR3KzC4uy;|m^hAA<^+_PW zvY#zK%1ih{-fZSAqNMi6;!vR#^q)_m{?(y=TSs5iO=D1P?m-%m z2Y`{mr7nig;~6v0#J24SZI{~nyMmHZSt3^of>6@qmDUXjjRPUy8gEI*h|;yGRdBBL z2e#GwH|(mj2i-fn*41^Ct*sp%-X2`HVMk++v&MMzDKkk>DbYwmG(|$tjy_Mb@8AQPjr?q zceXWhd)`v)CEqbB-F*eQNBpElwn>4wNQ`vo?vn+wP#3?|$@g2?08fh_;^Xoz3wxZW zWC?e3WZw7$>*A?c#rCq__Lu^9?`K^=_hq5I{EDruqrHc<@iXyMdTPR*7!xL^N9SfH zu9R!GFm!I&ZwsMJQpm|ai=Y6S>Y$Vkpp3L~XQsTLAF5Ekk8ww6cMW*5r_sQI8!G65g?&!1H`>alf+0lQ* z?mFV^?Kv#P`W;(0?~;B0=ULl;^dr;Oj;zQUFx}*a;Y%njtTxkUp|sb^1sILo%P4A! zHo2F$bWdwXG#hGGwWBgB?f#A#4(8yi13Z!k4Ec*ZXc(gRh+579@F-(J$$yFuN%P@0DD)CXV8|^Z)WwUWDf|cp zbNhe2ZxM$pQFA42-b#bM8*eZ=ro!kx)2Xy=nzQPos<5)g|IP`Dpgb$P!Bo)GS|u^B zzHSzgGumwM`ZU#TU^iIkuS;m6g&K17g$*p=P>}wxfkpb$%W#Okc@1{a^d@R#mI0Ba z+nd-!pI^mYG6%noCGm`mUx!9r+yt4J5P=SSjK2XxZOeEEUTvyZ&zKik_$(_rGgPsLez4NgvP2tNk{tdW z0u_B@4P9`R-daN+4X)uq+PjWNS#flZezS<@;VCLLzPrW00JC&+36H^nmeTjlw=?hs z=qz#0_@WC$UtEYyWdEHBYLW(n{#?NfT%u!Dd Date: Mon, 31 Jul 2017 21:34:18 +0300 Subject: [PATCH 10/28] change auth_user_model --- something/db.sqlite3 | Bin 208896 -> 208896 bytes something/simpleDjango/models.py | 10 ++++----- something/simpleDjango/user_manager.py | 27 +++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 something/simpleDjango/user_manager.py diff --git a/something/db.sqlite3 b/something/db.sqlite3 index 73e93cb1eca586c8a1529a3f6c620afdfc2c5adf..69801c0fedee63479fe43ed3e24450678ef02c14 100644 GIT binary patch delta 1694 zcmai!ZA=tL7{_;J_ipci+qt76(o;E35Up^xv&-I_Z`?)2rWQmI6>IRk<4pyYdjYOS zWi_PnLyZ@bPCqqPMa2>kNad5EO+VC{n)1b%G{qQeVr^@zO`Dq3*v=l*6g6>@XLcw1 z{GR>KGrRx3J2`!Ka!%T9-3-IXv%%8qvvipZx<~h%MQowTI>1}~M$^ZpI+Jx&yUxQ< z;Xv1$Z(!_e3?~zvjgpAHqF2U^*e79qQ7(GRW$eJdfP@1T*i|7_C_Z0k@eJjCnG#>1 z#DL;+Nm!{+JfTH1l;Gvdh zTMwwo*#1tx*Aq^tN@V=!PdJc^EA%eOI3W9Jmwbxi9XoXg6}=9&j05$b!m%lCDwjvM z81yFs6k{1Hu~TjRDpU!q(C3xJu=%*M=YAP+`>o#sz7=qdUO{f-`@yEOkk&Hox% zIo1q#ead8WhKYxhAm5tHTW&JwD(XO@FfDu_EVbMm)g~=M4R22msG@l+US^(ZanTMhsxT3rjwqSDu)@4QxfPIES-P98)>#1Xl^4y3aeN zp!Ia0bxZ};Qm%lpfX9sRxnKg1*_&)SyDRI2`Frz{oNFc%UuImBbB#^2=~3+)kbP{S z=H&C;ZqVOCgiEj#xXG`Bu#g-+2YK?|C3t|090ZHWvrBL(Svx`>oEm|4vTFpcx9< zC?!{i;bl&1)RvNO&%(Q)gp3TrRiIoKe~Y93ur{r&%s#qGTh8a#)`DXZeRK24Ctn|6VQiOr|s4tQk`0M;`=bs!O<=+PlOwz+E11vN7x)j zD-D_p7^c8%QupqUHcO51*07{_ie--|ip8n=+UmC(db+E{NPTf)dsxCd;%#+1{Ju!5 z*cJ>%l&a>M9;v6}ok&al-sTn2-bD4z_Nr~`SI<3tNeqahOOpIvuUD;9U9n_WPgBg8 zNYQQ8rM1mRlANwYHrpA-_G%@2v9C24YmYSStlC)YsZzG9H3w47{w=ksjkWFFA$h}k zDXH!YZSBGvlA$K=miOy7N1D4U-hDxdOqIx8m0hk#XS>=NfZ0reY%UDt<>#4Am^vwz z{!@J zC?(I^=okIbDPYW+VyJoCM?at`Y6M@P%52sSW<_yXYyp_*5o=)!!Si>+EY@zGt(Ham z#_6W=2tA>8a*tNIfz}#X8&Eql1@!hNQml#11G-emvw3D+0_F4pX^1qI(I}-+Ov6cw H+(Z8YTN2g* delta 1045 zcmah{Z)jUp6u;-Z*Sw@j-c8!Ry<~}NS~fb_*1VT2HYuyLTEV}a{V*I;Q2*vj3@GSnH7P{e3A+uCDB z>rpdd#3Q9Eo3!cw$nF)eb{k8#<=ZZqRtWur{z|uLWyPEPmh#G{5D@JxLU-tI^cT7% z+UvBubrW=tOIFtj{hW?aLtQVjTWWcI1H4WD;bR_+(v<8e%bmCrp0z?H3p|J90&#;S zNiX4YO+o&`^_dG*$=OU-!KzgphwL3-(N(%i2wW_(Zjh&sF(3cxDn1YU`A^p|z<*vu zKR@0FFO(Or;Yn1)@@;G6p3ZI}g!_1~AksIV;D_Ml;{`kht@kxN z1$6RfUxYp`G=lv2Rcx1?ufm%}CV_ZJCvz<0WM^1F(IU2Km{KN04hm%+!E=dh03=CQ8E za1WD9Irg+HYEQMYC~M#?OLzn7`Nk41%i?brbL@ii-5AppJsgJj{CwvlY~jTMhWO*N zn5CzNM#oO~r&D7C%^{KbwOM?QKl7Hbc<@P_{Q(#IA$r3=o5vO> zbdtu4>@ZcIKo{{xn;eY}O>^kHcN_iTh+(!JG1`upiFCFzoo#(3Gu%BioT^6mcsld? zB)AD{=^~DRgJ=%IKiI|-`^?0@uhNV}6Y0)$m6{e*cNvnn+jzl}?MUwsad~&dfqh5) zZmALe8G^M^!0|V$>`kKL(NHYJ6bK6(6lf7>7Stc Date: Mon, 31 Jul 2017 22:01:34 +0300 Subject: [PATCH 11/28] change user model view --- something/simpleDjango/admin.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/something/simpleDjango/admin.py b/something/simpleDjango/admin.py index acd3de4..a207110 100644 --- a/something/simpleDjango/admin.py +++ b/something/simpleDjango/admin.py @@ -16,6 +16,15 @@ class CatalogLook(admin.ModelAdmin): class UserLook(admin.ModelAdmin): list_display = ('username', 'email', 'is_staff') list_filter = ['is_staff', 'is_superuser', 'groups'] + fieldsets = ( + (None, {'fields': ('username', 'email', 'password', 'is_staff', 'is_superuser')}), + ('Groups & permissions', { + 'classes': ('collapse',), + 'fields': ('groups', 'user_permissions')}), + ('Advanced options', { + 'classes': ('collapse',), + 'fields': ('first_name', 'last_name', 'karma')}), + ) admin.site.register(Article, ArticleLook) From de76a1e58db8d0ab450a3ff71016c5bd22b7a6f7 Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Fri, 11 Aug 2017 22:36:44 +0300 Subject: [PATCH 12/28] Create auth form for custom admin panel --- .idea/inspectionProfiles/Project_Default.xml | 14 ++ requirements.txt | 2 +- something/adminPanel/admin.py | 32 ++++ something/adminPanel/models.py | 81 +++++++++ .../adminPanel/templates/index_admin.html | 47 +++++ something/adminPanel/urls.py | 22 +++ something/db.sqlite3 | Bin 208896 -> 266240 bytes something/simpleDjango/admin.py | 64 +++---- something/simpleDjango/models.py | 162 +++++++++--------- something/something/settings.py | 14 +- something/something/tamplates/index.html | 11 -- something/something/templates/index.html | 8 + something/something/urls.py | 7 +- something/something/views.py | 4 +- 14 files changed, 336 insertions(+), 132 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 something/adminPanel/admin.py create mode 100644 something/adminPanel/models.py create mode 100644 something/adminPanel/templates/index_admin.html create mode 100644 something/adminPanel/urls.py delete mode 100644 something/something/tamplates/index.html create mode 100644 something/something/templates/index.html diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..55cb8d3 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 20e25ec..4d592ea 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -Django==1.11.3 +Django==1.11.3 \ No newline at end of file diff --git a/something/adminPanel/admin.py b/something/adminPanel/admin.py new file mode 100644 index 0000000..63da5a0 --- /dev/null +++ b/something/adminPanel/admin.py @@ -0,0 +1,32 @@ +from django.contrib import admin +from .models import Article, Catalog, User +# Register your models here. + + +class ArticleLook(admin.ModelAdmin): + list_display = ('title', 'catalog', 'pub_date', 'is_index') + list_filter = ['catalog', 'pub_date', 'is_index'] + + +class CatalogLook(admin.ModelAdmin): + list_display = ('title', 'parent_catalog') + list_filter = ['parent_catalog'] + + +# class UserLook(admin.ModelAdmin): +# list_display = ('username', 'email', 'is_staff') +# list_filter = ['is_staff', 'is_superuser', 'groups'] +# fieldsets = ( +# (None, {'fields': ('username', 'email', 'password', 'is_staff', 'is_superuser')}), +# ('Groups & permissions', { +# 'classes': ('collapse',), +# 'fields': ('groups', 'user_permissions')}), +# ('Advanced options', { +# 'classes': ('collapse',), +# 'fields': ('first_name', 'last_name', 'karma')}), +# ) + + +admin.site.register(Article, ArticleLook) +admin.site.register(Catalog, CatalogLook) +# admin.site.register(User, UserLook) diff --git a/something/adminPanel/models.py b/something/adminPanel/models.py new file mode 100644 index 0000000..c34ca07 --- /dev/null +++ b/something/adminPanel/models.py @@ -0,0 +1,81 @@ +from django.db import models +from django.core.exceptions import ValidationError +from django.utils.translation import ugettext_lazy as _ +from django.contrib.auth.models import AbstractUser, Group, Permission, AbstractBaseUser, UserManager, PermissionsMixin +from django.core.mail import send_mail +from django.utils import timezone + + +# Create your models here. + + +class Article(models.Model): + class Meta: + verbose_name = 'Статья' + verbose_name_plural = 'Статьи' + + catalog = models.ForeignKey('Catalog', verbose_name='Каталог') + title = models.CharField('Название', max_length=200) + article_text = models.TextField('Текст статьи') + pub_date = models.DateTimeField('Дата публикации', default=timezone.now) + is_index = models.BooleanField('Индесная ?') + + def clean(self): + if self.is_index and Article.objects.filter(catalog=self.catalog, is_index=True).exclude(id=self.id).exists(): + raise ValidationError('Этот каталок уже имеет индексную страницу') + + def __str__(self): + return self.title + + +class Catalog(models.Model): + class Meta: + verbose_name = 'Каталог' + verbose_name_plural = 'Каталоги' + + parent_catalog = models.ForeignKey('Catalog', verbose_name='Родительский каталог', blank=True, null=True) + title = models.CharField('Название', max_length=200) + + def __str__(self): + return '{0} --> {1}'.format(self.parent_catalog, self.title) + + +class User(models.Model): + # birth_date = models.DateField('Дата рождения', blank=True, null=True) + groups = models.ManyToManyField(Group, 'Группы', blank=True) + user_permissions = models.ManyToManyField(Permission, 'Права', blank=True) + is_superuser = models.BooleanField('Суперпользователь?') + karma = models.IntegerField('Карма', default=0) + is_staff = models.BooleanField('Персонал?') + email = models.EmailField('E-mail', unique=True) + first_name = models.CharField('Имя', max_length=30, blank=True, null=True) + last_name = models.CharField('Фамилия', max_length=30, blank=True, null=True) + username = models.CharField('Логин', max_length=30, unique=True) +# +# objects = UserManager() +# +# USERNAME_FIELD = 'username' +# REQUIRED_FIELDS = ['email'] +# +# class Meta: +# verbose_name = _('user') +# verbose_name_plural = _('users') +# +# def get_full_name(self): +# ''' +# Returns the first_name plus the last_name, with a space in between. +# ''' +# full_name = '{0} {1}'.format(self.first_name, self.last_name) +# return full_name.strip() +# +# def get_short_name(self): +# ''' +# Returns the short name for the user. +# ''' +# return self.first_name +# +# def email_user(self, subject, message, from_email=None, **kwargs): +# ''' +# Sends an email to this User. +# ''' +# send_mail(subject, message, from_email, [self.email], **kwargs) diff --git a/something/adminPanel/templates/index_admin.html b/something/adminPanel/templates/index_admin.html new file mode 100644 index 0000000..6448f06 --- /dev/null +++ b/something/adminPanel/templates/index_admin.html @@ -0,0 +1,47 @@ +{% load staticfiles %} + + + + + + + + + + + + Signin Template for Bootstrap + + + + + + + + + + + + +
+
+ + +
+
+ + + + + + \ No newline at end of file diff --git a/something/adminPanel/urls.py b/something/adminPanel/urls.py new file mode 100644 index 0000000..7ba1072 --- /dev/null +++ b/something/adminPanel/urls.py @@ -0,0 +1,22 @@ +"""something URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url, include +from . import views + +urlpatterns = [ + url(r'^auth/', views.auth), + url(r'^', views.home), +] diff --git a/something/db.sqlite3 b/something/db.sqlite3 index 69801c0fedee63479fe43ed3e24450678ef02c14..7ba716424f4c49ed730122b2e7715d2fa30fdfad 100644 GIT binary patch delta 3631 zcmai1Yfu~472dmAv7px#*dX3oNl=@L$FAPO!5|){xRHPsu)#@XAqkKzguoC3?gU@i znelWyQ!AQ`X40vhI@6?WJa$w~OJ~w)-DXzE_qEX zXJ;L()63c|PX4BYb#$;!hP8KFoZVJar^W8HnC(`bl+d-he1XMKWXu-{hFO;7yrD>F zHRKEL6=rtY92RFk!-I8k&QdUQQIw^dHFa8THiy%mR@eTUZvKoYQ$3{MhtLCGgTIB( zs~)NzLQC$KLRVFk>d!=V935s zo{GEb6P~Ub3SJ}Xjpbf}{5P^X%YZRgcBa=xb=K}?cHsdA}VlmBjem|PCRv}m*-;@cK@xg+n zG5xP+|Is()_Xo`mZh0jzYi2j1X8&`($ik*+b|o0(p0g~5<~)O*#hHn-?DRw+Jbhwn z(LFpB_ADMdGjnEqV|sIBeP(ddJTr0Z?DU!GP50(m&NDcL*AmQ)tKUAp;F<87v23`9 z$Jx#$urZ=WdlN+NGE}SGBni(A07>TewxuQ0i`3|zO-K@RS zVm8@q=`U`40Ciu*S(ygWFSIX4DM<@#PtZH|D)oS_jXf3a0%^BU4(T(ZZzt5--=K5P;XR?~CTzcoR>0E)x^Q*quaIjFKnVKoOH4l7i$Tcy zlJDLmuYk7g;Wgj|RQX%Pqd5A|jl#%6Yd8*Ek`x09`$^^$Py_uAlqVE zqy#V+#jQ2qi!j;JXZTKI3|S9RtMMM$+l)uO9(y#k=39?n#to5KGvbpOv>hqx!#qSy zklFdsgV@fS4`L6lKKQ+JPWJ1OLH({w~l5$L9eKF`OeM5VYHWd zterP^-rD)iPP(Hh>%P0Ed3S6{zH%Q>_T2%88hIK{alhwj?8?0T`91KdxvHem?Aw*6 z$;aAl<}~@fNRO*;M%D2#+NH+tuoa6AO9z&AEMLd+H7uQ24q<7*qQ}AyUIUh+SWH+r zEM0v5UuoNw(oRAtxlT|YQMV=6RqrTYP~4M$EFYA;R1qt`O}|4M@ZvY%gzCr27vtzZ z6un7aNTKuOWK4k^w8rTKm(0Z#%U6SUer0JbdQMb?BCBoR%I$jwEL7yDbF%jqd7SP+ z_A<@5F{%Czs5_Kj%QT|bR0Lq{LAJbeOOZ2I@iLeG~|;A3lZv3pT4G{hk4E!UuGyamJi;^94$sW^C0R?zKK==5tuvydwB}hSK<;9y zA5VcAyPf0woYUkeP|6l?woQ)gyH|X0Z7#S3`R$*Q4Rwc653MX>V z{F>VbxqDw^KDag)T!MV-1gNh&fu5o@=ba!X-vhaM!0NEr{AP|TdKcmccYf6y!7Q4a zb|osI^7I>I>lU)1BeZ57cd)OBOTOizzLj8PHGhkXWzIZj_RreI<6W4xhxgl-eE9Bc zjePCp(v>jmSO;2ntQU1>M*QWr;saASV??zfSR4Y4(l3khJLG2apLfWHn g*ot3c@HHM-KaWyOnu`8ci?79hujA<^7&4dt2f}E0EC2ui delta 3461 zcmai0Yfu~472dlmSP77>7#kK40U1Lu=Cu!2Lb${T1TwKDEI@!1C(7ytk|od+5Xl%8 zhnb|WvC0okf4S36+K^DEgz0!XleS6vCru|a%(VT{PMtQH%+#JfQupC_#+|xXNH~%u z$ZGDc_U<{~`R+OAo_p55qg?w_#WhvsB8FjHb`a?KzhnnjwTN|<43?lb9Nt5BtQ|gp z_jW6v-++pmCG=ihFGu%AsdAH4p4|~YAa|8D|0L^wft4vXO5q)7hTn%jhgYB*@``Q6 zzZDybjU91TQQ2~aut=l6U?|`*_=Wk|h1ADec(tlZM|6YSX-7QjiAZ22#w5kg6RJL< zKTm7_vtu^05D!J+HLNMAZ&1N+P&C2kiwTjK&lT`&n!Bs(YFY?B--b(w34w)KeDg~8 zK(*{x3DFLOcx=uQ@p4FRA2x4#ORV~+Uz$4tvz;wp0lx|oH=M=?Ll+E798!dt(g7h zpncA62>8aPM-YgKF|XKtqw{n>OEcO|y0??*Q8T@L9Mi|?x_a1Np5J|V{bP9I%Q(w- zLFi%Qw?Yy^1)ZDZ9$IcQ+;#rZt~{>oWVC8V*GKbx9NWd~cug<2yZ0Hp*0F`jON>P6 zu@WOnk9N7W;zl`9wpT{UelHu6ULe1Qf0X%QFJiGB@!PnhbPJ=B;;+#YY$e5?q~HIV z6mQ>LjROZDQFPGtNmBf1ReUN)QkQuk`h4?l&vIT$Wy9?V2@%hH%yIDQb31x8-X6E$ zbrlmoF*H7`pBz??nhnD<>ZW2MUm%{`PbfzYWRrT#oUfJg{t#~*7h?gE;(2hjJSI2; zo?@`Y=326BCiR0Ch9ASNSq3jZQB0{xeX7alZfa}0Ig|kJju5Ky2PyI$fI{`t@|zES z1^&e~6hvQ}&UqYuj=}%J&(X&J3oMfmGJq2VCM(+o&p&K@D{QTkNH`$UpR?ufqx<5%m&CX(vz1{<@5u1c4Qyd|e6x(|2Ke&I-|mjRy& zzW^?!?!~~%sje5n6RG!NfReW9#pY7V+MQB92WmPBfE{eX6ss3cKGJ9_`0QW`rkILX z@Rl8M8%Qc%A?!&pTrc{?4w726fc46Ptlh7Vspnq9;c=JFspEBCZ!Th{e6}8*qhILP z9q1QHN#S+8E_MAiT&bE7+es>F0b=41DoQJm9oKMPotI|wHcW;}^OsRc>(?FV7pKzH z(6&yAr=^rwi+nP61d-I+Tezau>tt!S(5rF8=Y8Qk@1S*22OHRG9<^AD?&FM)(!}=h z8uRdqQ{+{gc#5Qiejr*4`Tb)GP<>8;@d(YM=$MwajOxHWEfLD+KbJ(;C-MD)^Njd@_jDb=KYwvEf5SwAkekW_y^xO%2|J<0YJ zhdHV<%cxih9=HT%D{>W6Z(IUTOHe62n-tH~uYW~sBPojoTy+(g-cQ1O-Tl_6>j-nq zn|L^1W&2Hha#d^-Ns@XNor0zU*E_N;QSR~Qb+I0ez;L<559CfBkrszQRj09vgy2U% zz-yjaH;SeE2j5FffeQ|77UR)&xEl`C(q(-z)pY}JNcnHzL-lzu+0*{uC`^qav6~Ma z09Sqwgw#-xz$Ehf7+iw}`F+KQJK}Bm>MBuziLH8BEr!*~q#@^Jx0iK9=LDA5G;a<#IXdu)TiHDawkdq?vFs6^2z7XX0df z=k$@F%WgBCYt|U~>Cjjp;nj^>66Y+z#X)Xln2m@0gA-w9BtGcTj;~Bzba@whOph_) z5ECvu5bkm<1VambcsW+f$r@Lys4AJ1Vbi}%yNFslof^?*P;1AyqXX_}TEpNA3Wm6Q zVNpQW6_D{B;*6Awc`smQ&o9##Vs7h*x!JYC&rMC!I-A{Tv`s{Yy9Gmd?)X6=aU&+LqS&Iov_b;+F!&$%XZQ!WhuV~P z;6OQ{0@+1M%7|K!@i`$U8o{Hr;AMnLmPJdqLK1ijgP+0s@D}_Op?nC>mJ*d9w6G75 n4p%HeNQo+tUOG+^RkAb%q?f*MG-xzVq0x#)Ga5|@ {1}'.format(self.parent_catalog, self.title) - - -class User(AbstractBaseUser, PermissionsMixin): - # birth_date = models.DateField('Дата рождения', blank=True, null=True) - groups = models.ManyToManyField(Group, 'Группы', blank=True) - user_permissions = models.ManyToManyField(Permission, 'Права', blank=True) - is_superuser = models.BooleanField('Суперпользователь?') - karma = models.IntegerField('Карма', default=0) - is_staff = models.BooleanField('Персонал?') - email = models.EmailField('E-mail', unique=True) - first_name = models.CharField('Имя', max_length=30, blank=True, null=True) - last_name = models.CharField('Фамилия', max_length=30, blank=True, null=True) - username = models.CharField('Логин', max_length=30, unique=True) - - objects = UserManager() - - USERNAME_FIELD = 'username' - REQUIRED_FIELDS = ['email'] - - class Meta: - verbose_name = _('user') - verbose_name_plural = _('users') - - def get_full_name(self): - ''' - Returns the first_name plus the last_name, with a space in between. - ''' - full_name = '{0} {1}'.format(self.first_name, self.last_name) - return full_name.strip() - - def get_short_name(self): - ''' - Returns the short name for the user. - ''' - return self.first_name - - def email_user(self, subject, message, from_email=None, **kwargs): - ''' - Sends an email to this User. - ''' - send_mail(subject, message, from_email, [self.email], **kwargs) +# from django.db import models +# from django.core.exceptions import ValidationError +# from django.utils.translation import ugettext_lazy as _ +# from django.contrib.auth.models import AbstractUser, Group, Permission, AbstractBaseUser, UserManager, PermissionsMixin +# from django.core.mail import send_mail +# from django.utils import timezone +# +# +# # Create your models here. +# +# +# class Article(models.Model): +# class Meta: +# verbose_name = 'Статья' +# verbose_name_plural = 'Статьи' +# +# catalog = models.ForeignKey('Catalog', verbose_name='Каталог') +# title = models.CharField('Название', max_length=200) +# article_text = models.TextField('Текст статьи') +# pub_date = models.DateTimeField('Дата публикации', default=timezone.now) +# is_index = models.BooleanField('Индесная ?') +# +# def clean(self): +# if self.is_index and Article.objects.filter(catalog=self.catalog, is_index=True).exclude(id=self.id).exists(): +# raise ValidationError('Этот каталок уже имеет индексную страницу') +# +# def __str__(self): +# return self.title +# +# +# class Catalog(models.Model): +# class Meta: +# verbose_name = 'Каталог' +# verbose_name_plural = 'Каталоги' +# +# parent_catalog = models.ForeignKey('Catalog', verbose_name='Родительский каталог', blank=True, null=True) +# title = models.CharField('Название', max_length=200) +# +# def __str__(self): +# return '{0} --> {1}'.format(self.parent_catalog, self.title) +# +# +# class User(models.Model): +# # birth_date = models.DateField('Дата рождения', blank=True, null=True) +# groups = models.ManyToManyField(Group, 'Группы', blank=True) +# user_permissions = models.ManyToManyField(Permission, 'Права', blank=True) +# is_superuser = models.BooleanField('Суперпользователь?') +# karma = models.IntegerField('Карма', default=0) +# is_staff = models.BooleanField('Персонал?') +# email = models.EmailField('E-mail', unique=True) +# first_name = models.CharField('Имя', max_length=30, blank=True, null=True) +# last_name = models.CharField('Фамилия', max_length=30, blank=True, null=True) +# username = models.CharField('Логин', max_length=30, unique=True) +# # +# # objects = UserManager() +# # +# # USERNAME_FIELD = 'username' +# # REQUIRED_FIELDS = ['email'] +# # +# # class Meta: +# # verbose_name = _('user') +# # verbose_name_plural = _('users') +# # +# # def get_full_name(self): +# # ''' +# # Returns the first_name plus the last_name, with a space in between. +# # ''' +# # full_name = '{0} {1}'.format(self.first_name, self.last_name) +# # return full_name.strip() +# # +# # def get_short_name(self): +# # ''' +# # Returns the short name for the user. +# # ''' +# # return self.first_name +# # +# # def email_user(self, subject, message, from_email=None, **kwargs): +# # ''' +# # Sends an email to this User. +# # ''' +# # send_mail(subject, message, from_email, [self.email], **kwargs) diff --git a/something/something/settings.py b/something/something/settings.py index 6403d7a..56f217c 100644 --- a/something/something/settings.py +++ b/something/something/settings.py @@ -37,7 +37,9 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - 'simpleDjango', + # 'simpleDjango', + 'adminPanel', + 'something', ] MIDDLEWARE = [ @@ -55,7 +57,8 @@ TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], + 'DIRS': ['/home/project/PycharmProjects/knowledge-wiki/something/something/templates/', + '/home/project/PycharmProjects/knowledge-wiki/something/adminPanel/templates/'], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ @@ -114,9 +117,14 @@ USE_TZ = True -AUTH_USER_MODEL = 'simpleDjango.User' +# AUTH_USER_MODEL = 'simpleDjango.User' # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' + +STATICFILES_DIRS = [ + ('static', '/home/project/PycharmProjects/knowledge-wiki/something/something/static/'), + ('static', '/home/project/PycharmProjects/knowledge-wiki/something/adminPanel/static/'), +] diff --git a/something/something/tamplates/index.html b/something/something/tamplates/index.html deleted file mode 100644 index 7e43113..0000000 --- a/something/something/tamplates/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - HTML5 - - -

Simple Django

- Авторизация - - \ No newline at end of file diff --git a/something/something/templates/index.html b/something/something/templates/index.html new file mode 100644 index 0000000..4631c3e --- /dev/null +++ b/something/something/templates/index.html @@ -0,0 +1,8 @@ + + + + +

Hello, this is new project

+

it would be knowlege- wiki later

+ + \ No newline at end of file diff --git a/something/something/urls.py b/something/something/urls.py index 18eb602..aa82e39 100644 --- a/something/something/urls.py +++ b/something/something/urls.py @@ -13,10 +13,13 @@ 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ -from django.conf.urls import url +from django.conf.urls import url, include from django.contrib import admin +from . import views +# from something import adminPanel urlpatterns = [ - # url(r'^', views.home), + url(r'^myadmin/', include('adminPanel.urls')), url(r'^admin/', admin.site.urls), + url(r'^', views.home), ] diff --git a/something/something/views.py b/something/something/views.py index 8c3b0ce..ab2ed04 100644 --- a/something/something/views.py +++ b/something/something/views.py @@ -5,5 +5,5 @@ def home(request): - return render(request, 'index.html', - {'username': auth.get_user(request).username}) \ No newline at end of file + return render(request, 'index_admin.html', + {'username': auth.get_user(request).username}) From e6687d7e477f5e236e9f82144002a34cd851e885 Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Fri, 11 Aug 2017 22:46:17 +0300 Subject: [PATCH 13/28] Create auth form for custom admin panel --- something/adminPanel/__init__.py | 0 something/adminPanel/apps.py | 5 +++++ something/adminPanel/tests.py | 3 +++ something/adminPanel/views.py | 11 +++++++++++ 4 files changed, 19 insertions(+) create mode 100644 something/adminPanel/__init__.py create mode 100644 something/adminPanel/apps.py create mode 100644 something/adminPanel/tests.py create mode 100644 something/adminPanel/views.py diff --git a/something/adminPanel/__init__.py b/something/adminPanel/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/something/adminPanel/apps.py b/something/adminPanel/apps.py new file mode 100644 index 0000000..975e451 --- /dev/null +++ b/something/adminPanel/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class AdminpanelConfig(AppConfig): + name = 'adminPanel' diff --git a/something/adminPanel/tests.py b/something/adminPanel/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/something/adminPanel/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/something/adminPanel/views.py b/something/adminPanel/views.py new file mode 100644 index 0000000..4a0423f --- /dev/null +++ b/something/adminPanel/views.py @@ -0,0 +1,11 @@ +from django.shortcuts import render + +# Create your views here. + + +def home(request): + return render(request, 'index_admin.html') + + +def auth(request): + return render(request, 'index.html') From 0842a8983154bc4bde51502356318c395bfd8cf2 Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Sat, 12 Aug 2017 03:53:52 +0300 Subject: [PATCH 14/28] custom auth done --- something/adminPanel/admin.py | 29 +++++++++--------- something/adminPanel/models.py | 3 +- .../adminPanel/templates/index_admin.html | 6 ++-- something/adminPanel/views.py | 10 +++++- something/db.sqlite3 | Bin 266240 -> 266240 bytes something/something/templates/index.html | 1 + 6 files changed, 30 insertions(+), 19 deletions(-) diff --git a/something/adminPanel/admin.py b/something/adminPanel/admin.py index 63da5a0..0b9b102 100644 --- a/something/adminPanel/admin.py +++ b/something/adminPanel/admin.py @@ -1,5 +1,6 @@ from django.contrib import admin -from .models import Article, Catalog, User +from .models import Article, Catalog, CustomUser +from django.forms.widgets import HiddenInput # Register your models here. @@ -13,20 +14,20 @@ class CatalogLook(admin.ModelAdmin): list_filter = ['parent_catalog'] -# class UserLook(admin.ModelAdmin): -# list_display = ('username', 'email', 'is_staff') -# list_filter = ['is_staff', 'is_superuser', 'groups'] -# fieldsets = ( -# (None, {'fields': ('username', 'email', 'password', 'is_staff', 'is_superuser')}), -# ('Groups & permissions', { -# 'classes': ('collapse',), -# 'fields': ('groups', 'user_permissions')}), -# ('Advanced options', { -# 'classes': ('collapse',), -# 'fields': ('first_name', 'last_name', 'karma')}), -# ) +class UserLook(admin.ModelAdmin): + list_display = ('username', 'email', 'is_staff') + list_filter = ['is_staff', 'is_superuser', 'groups'] + fieldsets = ( + (None, {'fields': ('username', 'email', 'password', 'is_staff', 'is_superuser')}), + ('Groups & permissions', { + 'classes': ('collapse',), + 'fields': ('groups', 'user_permissions')}), + ('Advanced options', { + 'classes': ('collapse',), + 'fields': ('first_name', 'last_name', 'karma')}), + ) admin.site.register(Article, ArticleLook) admin.site.register(Catalog, CatalogLook) -# admin.site.register(User, UserLook) +admin.site.register(CustomUser, UserLook) diff --git a/something/adminPanel/models.py b/something/adminPanel/models.py index c34ca07..9dc49b7 100644 --- a/something/adminPanel/models.py +++ b/something/adminPanel/models.py @@ -40,7 +40,7 @@ def __str__(self): return '{0} --> {1}'.format(self.parent_catalog, self.title) -class User(models.Model): +class CustomUser(models.Model): # birth_date = models.DateField('Дата рождения', blank=True, null=True) groups = models.ManyToManyField(Group, 'Группы', blank=True) user_permissions = models.ManyToManyField(Permission, 'Права', blank=True) @@ -51,6 +51,7 @@ class User(models.Model): first_name = models.CharField('Имя', max_length=30, blank=True, null=True) last_name = models.CharField('Фамилия', max_length=30, blank=True, null=True) username = models.CharField('Логин', max_length=30, unique=True) + password = models.CharField('Пароль', max_length=100) # # objects = UserManager() # diff --git a/something/adminPanel/templates/index_admin.html b/something/adminPanel/templates/index_admin.html index 6448f06..fbab7e8 100644 --- a/something/adminPanel/templates/index_admin.html +++ b/something/adminPanel/templates/index_admin.html @@ -28,11 +28,11 @@
- +

{{error}}

diff --git a/something/adminPanel/views.py b/something/adminPanel/views.py index 4a0423f..dd39954 100644 --- a/something/adminPanel/views.py +++ b/something/adminPanel/views.py @@ -1,4 +1,6 @@ from django.shortcuts import render +from .models import CustomUser +from django.contrib.auth.hashers import make_password, check_password # Create your views here. @@ -8,4 +10,10 @@ def home(request): def auth(request): - return render(request, 'index.html') + try: + password = CustomUser.objects.values().get(username=request.POST.get('login')).get('password') + if check_password(request.POST.get('password'), password): + return render(request, 'index.html') + except Exception: + return render(request, 'index_admin.html', + {'error': 'Invalid login or password'}) diff --git a/something/db.sqlite3 b/something/db.sqlite3 index 7ba716424f4c49ed730122b2e7715d2fa30fdfad..0bddac685bb61feadc644764d4f00062181b8e81 100644 GIT binary patch delta 3243 zcmbtWeQXouAHV1NdhNB()ohdvm9~2+V{3Q4yY|}6!OAE)m2FHmoWM%oHj7(3)=nXd zj01@Y8r>}M68}*bM1m77i|!v4O*F=r5RDp@WcZqxUw-j5Kl3xq!R+n9NPIk*>WicjV>C^3;mA}r9cE|`Py0Pgn5Mn7^utB_T^`0p(`{b5 z%@c65Jj>BcupS|FtVCeLv8hZpJwBC5Ook^Snal&}$@morkBwp5Xs(U*xNl>5&hOq=QLD_D5K3`4U@2&RojC_XpGczix)ahr8feS|m9(WR-g9pva&;@ZAM_&$d zdErrWZo%C$*Qd!XyI0rEVrHb!WBwC^Kf*8J`|vgRG&~0P!Moum*bJ-8f98b?=2fdnHDe>H0Ps*O?+F%G68#Vd}^W^JK`X2CaaMC&m)lgd%Uw!t>a@=v>O@ja6#U z1jtA{u5fNx?AZP8q{<0vbGnbZwXhM|U~OJ_+kAsY1pw)k*G745SZw*~i`n(0W(L#V zp_zeRbF*oHJY!TDJ~CK|3q+Uh12wL$Q`g}D2iRL!HZQ!2FMU4=HiG=@F0eE+1&*$- zHNtZkyaa!TKcjqq2bbaJ@MHJ^d@~C-NW_hp zaXB>@XbqG~*cD0H3cA_~DYQxHcQqE=OO%z|3lEjW}$rq(Sa@3ua3a9&>|@(&Rqm`Vhm}ubkjxfoqc|fZGM89pD3*84{EMYx0OP@ z-Hwb!#v$8?tOFU3%!}+6WNpZN$fSuKK(+yy8<`7P3o^-H^5aoqF2J)BfNH{P(d62I znJuOrsj`G<^bS!aoGAO#Y z?8DY4_k&vE$`}`I`+-+Hkp&mT)HGNn8fE~gZ|WBMwAS6cNDYG;@%#zg&{!yRDJ@~9 zEG`4Ls0Zr57{-4HlzPp0CD{UveoAQp#D;jo7D`)F?XjVZ7q2_Tq^}X5K7~{EX`%ZckXfgYFPw~rSuY(&ccrf^ zay4+4&~jG*xE?`|LfmBB(R4T<+=jTikZ=!NM>t*aknYp?s+)Ol#2;liZ+I$|+*g5a zqj={6Zd0nb0z+TK5a$-~RSLH&!cU*ZYwd^og_V5YMQ2ThfRL!5#;=2*x*;C*upB$Wm+UJS zZQ)9elC^>1g^)bPG&WusDc99 z3Q!f8DmXZ7>l_L+xu$SoGpZ>V0*BknpJA&4;F_IfI#N6EoX1DUVik%^0pO4;OmB#ggY-SY9b5V*>HfiqEwOmdP;zVVz-Hc`91ZeWU+Td2?!g^_Z5?O# vs3|RgKcV+lwE6e&28*hRSh?rPuL1QO!29M8QLj+=FX_2i>0W$}!l}Oj3)KJG delta 1718 zcmZ`(ZA@EL7{2fAEf-3A-||teEkg>_A+&rHTA)hD>SmOf4v6C;vROU~1cQ8SWMoSi zw_`Ce#!(wR{}30MOc|tWV*R0E`?Y0@$&4<Ix`B)?a>{E!A*EOv)R| zvuGF0npX94xrg~`*C98Yw+;^q!od}`sWNarzoc=rZ7MyhUr%ZiaMvhgKr zjPI68=cFd+>4Ov z1zBnbgT7s==fzVF@TJQZLCQMdd6T`)R?}N;waP6`5^}_SE$@K5)C4_l>6La6$>|Od z!W~!GZOHZ6BnL0L-Egi`UR*Kz(~~TXbwF*bq++Srx5(PbbSD(Yi|fNh_RaV$Lhp|t hUYyo`L2nZy{nD%C>L_OnaiiP$w4MA$DLWmp=70T`B;f!6 diff --git a/something/something/templates/index.html b/something/something/templates/index.html index 4631c3e..f7dc568 100644 --- a/something/something/templates/index.html +++ b/something/something/templates/index.html @@ -2,6 +2,7 @@ +

{{error}}

Hello, this is new project

it would be knowlege- wiki later

From a3059e219d9683f02a978871c8b849cc93264285 Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Sat, 12 Aug 2017 08:20:22 +0300 Subject: [PATCH 15/28] fix urls --- something/adminPanel/views.py | 16 ++++++++-------- something/something/views.py | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/something/adminPanel/views.py b/something/adminPanel/views.py index dd39954..7480803 100644 --- a/something/adminPanel/views.py +++ b/something/adminPanel/views.py @@ -1,4 +1,4 @@ -from django.shortcuts import render +from django.shortcuts import render, redirect from .models import CustomUser from django.contrib.auth.hashers import make_password, check_password @@ -10,10 +10,10 @@ def home(request): def auth(request): - try: - password = CustomUser.objects.values().get(username=request.POST.get('login')).get('password') - if check_password(request.POST.get('password'), password): - return render(request, 'index.html') - except Exception: - return render(request, 'index_admin.html', - {'error': 'Invalid login or password'}) + password = CustomUser.objects.values().get(username=request.POST.get('login')).get('password') + if check_password(request.POST.get('password'), password): + # return render(request, 'index.html') + return redirect('/') + # return render(request, 'index_admin.html', + # {'error': 'Invalid login or password'}) + return redirect('/myadmin/', kwargs={'error': 'Invalid login or password'}) diff --git a/something/something/views.py b/something/something/views.py index ab2ed04..2fca514 100644 --- a/something/something/views.py +++ b/something/something/views.py @@ -5,5 +5,5 @@ def home(request): - return render(request, 'index_admin.html', + return render(request, 'index.html', {'username': auth.get_user(request).username}) From baa25344f7f018549c9f03538f95d229f0122396 Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Sat, 12 Aug 2017 12:01:47 +0300 Subject: [PATCH 16/28] fix urls --- something/adminPanel/views.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/something/adminPanel/views.py b/something/adminPanel/views.py index 7480803..ade280c 100644 --- a/something/adminPanel/views.py +++ b/something/adminPanel/views.py @@ -12,8 +12,8 @@ def home(request): def auth(request): password = CustomUser.objects.values().get(username=request.POST.get('login')).get('password') if check_password(request.POST.get('password'), password): - # return render(request, 'index.html') - return redirect('/') - # return render(request, 'index_admin.html', - # {'error': 'Invalid login or password'}) - return redirect('/myadmin/', kwargs={'error': 'Invalid login or password'}) + return render(request, 'index.html') + # return redirect('/') + return render(request, 'index_admin.html', + {'error': 'Invalid login or password'}) + # return redirect('/myadmin/', {'error': 'Invalid login or password'}) From 16b5bce67f3294f5fc3f3f833d9ecb69159ae29c Mon Sep 17 00:00:00 2001 From: Dudov Dima Date: Sat, 12 Aug 2017 12:02:21 +0300 Subject: [PATCH 17/28] fix urls --- something/adminPanel/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/something/adminPanel/views.py b/something/adminPanel/views.py index ade280c..3ad59ca 100644 --- a/something/adminPanel/views.py +++ b/something/adminPanel/views.py @@ -12,8 +12,8 @@ def home(request): def auth(request): password = CustomUser.objects.values().get(username=request.POST.get('login')).get('password') if check_password(request.POST.get('password'), password): - return render(request, 'index.html') - # return redirect('/') + # return render(request, 'index.html') + return redirect('/') return render(request, 'index_admin.html', {'error': 'Invalid login or password'}) # return redirect('/myadmin/', {'error': 'Invalid login or password'}) From 88f17c5605780c90065d5aa2f44a247afacf8f59 Mon Sep 17 00:00:00 2001 From: b0g3r Date: Sat, 12 Aug 2017 20:34:01 +0300 Subject: [PATCH 18/28] fi --- .gitignore | 1 + .../adminPanel/templates/index_admin.html | 2 +- something/adminPanel/urls.py | 3 +-- something/adminPanel/views.py | 25 +++++++++++++------ something/something/urls.py | 2 +- 5 files changed, 22 insertions(+), 11 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62c8935 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ \ No newline at end of file diff --git a/something/adminPanel/templates/index_admin.html b/something/adminPanel/templates/index_admin.html index fbab7e8..13ff755 100644 --- a/something/adminPanel/templates/index_admin.html +++ b/something/adminPanel/templates/index_admin.html @@ -29,7 +29,7 @@

{{error}}

-