· 9 years ago · Oct 06, 2016, 07:16 AM
1Модель Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ "core"
2
3"""
4Model and manager used by the model-based activation workflow. If
5you're not using that workflow, you should not have 'registration' in
6your INSTALLED_APPS.
7
8This is provided primarily for backwards-compatibility with existing
9installations; new installs of django-registration should look into
10the HMAC activation workflow in registration.backends.hmac, which also
11provides a two-step process but requires no models or storage of the
12activation key.
13
14"""
15import datetime
16import hashlib
17import re
18from django.conf import settings
19from django.contrib.auth import get_user_model
20from django.db import models, transaction
21from django.template.loader import render_to_string
22from django.utils.crypto import get_random_string
23from django.utils.encoding import python_2_unicode_compatible
24from django.utils import timezone
25from django.utils.translation import ugettext_lazy as _
26from django.contrib.auth.models import AbstractBaseUser
27from django.contrib.auth.models import BaseUserManager
28from django.contrib.auth.models import PermissionsMixin
29from tinymce import models as tinymce_model
30from embed_video.fields import EmbedVideoField
31from django.core.mail import send_mail
32
33
34SHA1_RE = re.compile('^[a-f0-9]{40}$')
35
36#КÐСТОМÐÐЯ МОДЕЛЬ ПОЛЬЗОВÐТЕЛЯ
37#менеджер ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ - обычного и ÑуперпользователÑ
38class UserManager(BaseUserManager):
39
40 def create_user(self, email, password=None):
41
42 if not email:
43 raise ValueError('Поле email должно быть введено, потому что ÑвлÑетÑÑ Ð¾Ð±Ñзательным')
44
45 user = self.model(
46 email=UserManager.normalize_email(email),
47 )
48
49 user.set_password(password)
50 user.save(using=self._db)
51 return user
52
53 def create_superuser(self, email, password):
54 u"""Create superuser."""
55 user = self.create_user(email, password)
56 user.is_admin = True
57 user.is_superuser = True
58 user.save(using=self._db)
59 return user
60
61#Ñама каÑÑ‚Ð¾Ð¼Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ пользователÑ
62class ExtUser(AbstractBaseUser, PermissionsMixin):
63
64 login = models.CharField(
65 'Login',
66 max_length=255,
67 #unique=True
68 )
69 email = models.EmailField(
70 'Email',
71 max_length=255,
72 db_index=True,
73 unique=True,
74
75 )
76 avatar = models.ImageField(
77 'Avatar image',
78 blank=True,
79 null=True,
80 upload_to="images/",
81 )
82 firstname = models.CharField(
83 'First name',
84 max_length=40,
85 null=True,
86 blank=True
87 )
88 lastname = models.CharField(
89 'Last name',
90 max_length=40,
91 null=True,
92 blank=True
93 )
94 middlename = models.CharField(
95 'Middle name',
96 max_length=40,
97 null=True,
98 blank=True
99 )
100 date_of_birth = models.DateField(
101 'Date of birth',
102 null=True,
103 blank=True
104 )
105 register_date = models.DateTimeField(
106 'Registration date',
107 auto_now_add=True
108 )
109 is_active = models.BooleanField(
110 'Active', # Not blocked, banned, etc
111 default=True
112 )
113 is_admin = models.BooleanField(
114 'Is superuser',
115 default=False
116 )
117 phone = models.CharField(
118 max_length=20,
119 verbose_name="Телефон"
120 )
121 foto = models.ImageField(
122 null=True,
123 blank=True,
124 upload_to="images/",
125 verbose_name="Ð¤Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ñ€Ð¸ÐµÐ»Ñ‚Ð¾Ñ€Ð°"
126 )
127 video = EmbedVideoField(
128 null=True,
129 blank=True,
130 verbose_name="ПерÑональное видео автора"
131 )
132 about = models.TextField(
133 null=True,
134 blank=True,
135 verbose_name="Об авторе"
136 )
137
138 def __str__(self):
139 return self.login
140
141 def bit(self):
142 if self.foto:
143 return u'<img src="%s" width="50px">' % self.foto.url
144 else:
145 return "Ðет изображениÑ"
146
147 bit.short_desription = "ФотографиÑ"
148 bit.allow_tags = True
149
150 # Django require define this method
151 def get_full_name(self):
152 return self.email
153
154 @property
155 def is_staff(self):
156 # Required Django for admin panel
157 return self.is_admin
158
159 def get_short_name(self):
160 u"""Return short name."""
161 return self.email
162
163 def __str__(self):
164 u"""String representation of model. Email by default."""
165 return self.email
166
167 # Field, used as 'username' in authentication and orher forms
168 USERNAME_FIELD = 'email'
169 REQUIRED_FIELDS = []
170
171 # Link model and model manager
172 objects = UserManager()
173
174 class Meta:
175 verbose_name = 'Пользователь'
176 verbose_name_plural = 'Пользователи'
177 db_table = 'extuser'
178 #unique_together = ('login', 'email')
179
180
181#ГРУППРКЛÐССОВ ДЛЯ ÐУТЕÐТИФИКÐЦИИ ПОЛЬЗОВÐТЕЛЕЙ(РЕГИСТРÐЦИЯ, ÐВТОРИЗÐЦИЯ, ÐКТИВÐЦИЯ И Т.Д.)
182#Управление процеÑÑом региÑтрации
183class RegistrationManager(models.Manager):
184 """
185 Custom manager for the ``RegistrationProfile`` model.
186
187 The methods defined here provide shortcuts for account creation
188 and activation (including generation and emailing of activation
189 keys), and for cleaning out expired inactive accounts.
190
191 """
192 def activate_user(self, activation_key):
193 """
194 Validate an activation key and activate the corresponding user
195 if valid. Returns the user account on success, ``False`` on
196 failure.
197
198 """
199 # Make sure the key we're trying conforms to the pattern of a
200 # SHA1 hash; if it doesn't, no point trying to look it up in
201 # the database.
202 if SHA1_RE.search(activation_key.lower()):
203 try:
204 profile = self.get(activation_key=activation_key)
205 except self.model.DoesNotExist:
206 return False
207 if not profile.activation_key_expired():
208 user = profile.user
209 user.is_active = True
210 user.save()
211 profile.activation_key = self.model.ACTIVATED
212 profile.save()
213 return user
214 return False
215
216 def expired(self):
217 """
218 Query for all profiles which are expired and correspond to
219 non-active users.
220
221 """
222 if settings.USE_TZ:
223 now = timezone.now()
224 else:
225 now = datetime.datetime.now()
226 return self.exclude(
227 user__is_active=True
228 ).filter(
229 models.Q(activation_key=self.model.ACTIVATED) |
230 models.Q(
231 user__date_joined__lt=now - datetime.timedelta(
232 settings.ACCOUNT_ACTIVATION_DAYS
233 )
234 )
235 )
236
237 @transaction.atomic
238 def create_inactive_user(self, form, site, send_email=True):
239 """
240 Create a new, inactive user, generate a
241 ``RegistrationProfile`` and email its activation key to the
242 user, returning the new user.
243
244 """
245 new_user = form.save(commit=False)
246 new_user.is_active = False
247 new_user.save()
248
249 registration_profile = self.create_profile(new_user)
250
251 if send_email:
252 registration_profile.send_activation_email(site)
253
254 return new_user
255
256 def create_profile(self, user):
257 """
258 Create a ``RegistrationProfile`` for a given user, and return
259 the ``RegistrationProfile``.
260
261 """
262 User = get_user_model()
263 username = str(getattr(user, User.USERNAME_FIELD))
264 hash_input = (get_random_string(5) + username).encode('utf-8')
265 activation_key = hashlib.sha1(hash_input).hexdigest()
266 return self.create(user=user,
267 activation_key=activation_key
268 )
269
270 @transaction.atomic
271 def delete_expired_users(self):
272 """
273 Remove expired instances of ``RegistrationProfile`` and their
274 associated users.
275
276 """
277 for profile in self.expired():
278 user = profile.user
279 profile.delete()
280 user.delete()
281
282#Ñоздание модели региÑтрации(региÑтрационного профилÑ)
283@python_2_unicode_compatible
284class RegistrationProfile(models.Model):
285 """
286 A simple model which stores an activation key for use during user
287 account registration.
288
289 """
290 ACTIVATED = "ALREADY_ACTIVATED"
291
292 user = models.OneToOneField(settings.AUTH_USER_MODEL,
293 verbose_name=_(u'Пользователь'))
294 activation_key = models.CharField(_(u'activation key'), max_length=40)
295
296 objects = RegistrationManager()
297
298 class Meta:
299 verbose_name = _(u'Профиль региÑтрации')
300 verbose_name_plural = _(u'Данные о профилÑÑ…')
301
302 def __str__(self):
303 return "Registration information for %s" % self.user
304
305 def activation_key_expired(self):
306 """
307 Determine whether this ``RegistrationProfile``'s activation
308 key has expired, returning a boolean -- ``True`` if the key
309 has expired, ``False`` otherwise.
310
311 """
312 expiration_date = datetime.timedelta(
313 days=settings.ACCOUNT_ACTIVATION_DAYS
314 )
315 return self.activation_key == self.ACTIVATED or \
316 (self.user.register_date + expiration_date <= timezone.now())
317 activation_key_expired.boolean = True
318
319 def send_activation_email(self, site):
320 """
321 Send an activation email to the user associated with this
322 ``RegistrationProfile``.
323
324
325 """
326 ctx_dict = {'activation_key': self.activation_key,
327 'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS,
328 'user': self.user,
329 'site': site}
330
331 subject = render_to_string('registration/activation_email_subject.txt', ctx_dict)
332
333
334 # Force subject to a single line to avoid header-injection
335 # issues.
336 subject = ''.join(subject.splitlines())
337
338 message = render_to_string('registration/activation_email.txt', ctx_dict)
339
340 # не может отоÑлать - нужен Ñенд-мÑйл
341 #self.user.email(subject, message, settings.DEFAULT_FROM_EMAIL)
342 send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [settings.EMAIL_HOST])
343
344
345
346Модель Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ article
347
348from core.models import ExtUser
349from django.db import models
350from django.db.models import fields
351from tinymce import models as tinymce_model
352from embed_video.fields import EmbedVideoField
353import mptt
354from mptt.models import MPTTModel, TreeForeignKey
355
356
357#ÐаÑледуетÑÑ Ð¾Ñ‚ extuser
358#http://djbook.ru/rel1.9/ref/contrib/auth.html?highlight=django.contrib.auth.models.user#django.contrib.auth.models.User
359class Author(ExtUser):
360
361 class Meta():
362 db_table = "author"
363 verbose_name = "Риелтор"
364 verbose_name_plural = "Риелторы"
365
366 def __str__(self):
367 return self.login
368
369 def bit(self):
370 if self.foto:
371 return u'<img src="%s" width="50px">' % self.foto.url
372 else:
373 return "Ðет изображениÑ"
374
375 bit.short_desription = "ФотографиÑ"
376 bit.allow_tags = True
377
378class Category(MPTTModel):
379
380 name = models.CharField(max_length=150, verbose_name='КатегориÑ')
381 parent = TreeForeignKey('self', null=True, blank=True, related_name='children',
382 verbose_name='РодительÑкий клаÑÑ')
383
384 class Meta():
385 db_table = 'category'
386 verbose_name_plural = 'Категории'
387 verbose_name = 'КатегориÑ'
388 ordering = ('tree_id', 'level')
389
390 def __str__(self):
391 return self.name
392
393 # Ñтроит Ñтруктуру name в виде дерева
394 class MPTTMeta:
395 order_insertion_by = ['name']
396
397
398mptt.register(Category, order_insertion_by=['name'])
399
400
401#Ðеобходимо пиÑать облако тегов до вÑех оÑтальных клаÑÑов
402class Keywords(models.Model):
403
404 name = models.CharField(max_length=50, unique=True, verbose_name='ПоиÑк')
405
406 class Meta():
407 db_table = 'keywords'
408 verbose_name = "Ключевое Ñлово"
409 verbose_name_plural = "Ключевые Ñлова"
410
411 def __str__(self):
412 return self.name
413
414
415#Ðеобходимо пиÑать облако тегов до вÑех оÑтальных клаÑÑов
416class Cloudtegs(models.Model):
417
418 class Meta():
419 db_table = 'cloudtegs'
420 verbose_name = "тег"
421 verbose_name_plural = "Облако тегов"
422
423 name = models.CharField(max_length=50, unique=True, verbose_name='Теги')
424
425 def __unicode__(self):
426 return self.name
427
428 def __str__(self):
429 return self.name
430
431
432#ÐбÑÑ‚Ñ€Ð°ÐºÑ‚Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ
433class AbstractContent(models.Model):
434
435 title = models.CharField(max_length=200)
436 text = tinymce_model.HTMLField(verbose_name="Подробное опиÑание")
437 # поле необÑзательное
438 image = models.ImageField(null=True, blank=True, upload_to="images/", verbose_name="ИзображениÑ")
439 # необÑзательнаÑ
440 video = EmbedVideoField(null=True, blank=True, verbose_name="Видео")
441 date = models.DateTimeField(null=True, blank=True)
442
443 class Meta:
444 abstract = True
445
446
447class Home(AbstractContent):
448
449 # автор наÑледуетÑÑ Ð¾Ñ‚ USER(джанговÑкого), Ñам клаÑÑ Author его раÑширÑет
450 author = models.ForeignKey(Author, max_length=150, verbose_name="Ðвтор Ñтатьи")
451 #Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²
452 path = models.CharField(null=True, blank=True, max_length=150, verbose_name="указать путь к папке Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñми")
453
454 class Meta():
455 db_table = 'home'
456 ordering = ['title']
457 verbose_name = "Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ñтраница"
458 verbose_name_plural = "СтатичеÑкие Ñтраницы"
459
460 def __str__(self):
461 return self.title
462
463 def bit_home(self):
464 if self.image:
465 return u'<img src="%s" width="50px">' % self.image.url
466 else:
467 return "Ðет изображениÑ"
468
469 bit_home.short_desription= "Изображение"
470 bit_home.allow_tags = True
471
472
473class Article(AbstractContent):
474
475 text_min = tinymce_model.HTMLField(verbose_name="Краткое опиÑание")
476 likes = models.IntegerField(default=0)
477 #ÑвÑзка деревобразного ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ñо ÑтатьÑми
478 category = TreeForeignKey(Category, blank=True, null=True, related_name='cat')
479 #Пропишем поле, которое ÑвÑжет keywords, Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ клаÑÑом
480 keywords = models.ManyToManyField(Keywords, related_name='keywords', related_query_name='keyword', verbose_name='Ключевые Ñлова поиÑка')
481 #Пропишем поле, которое ÑвÑжет cloudtegs, Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ клаÑÑом
482 cloudtegs = models.ManyToManyField(Cloudtegs, related_name='cloudtegs', related_query_name='cloudteg', verbose_name='Ключевые Ñлова')
483 main_data = tinymce_model.HTMLField(verbose_name="Главное о недвижимоÑти")
484 address = tinymce_model.HTMLField(verbose_name="ÐдреÑ")
485 # автор наÑледуетÑÑ Ð¾Ñ‚ USER(джанговÑкого), Ñам клаÑÑ Author его раÑширÑет
486 author = models.ForeignKey(Author, max_length=150, verbose_name="Риелтор")
487 # Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²
488 path = models.CharField(null=True, blank=True, max_length=150, verbose_name="указать путь к папке Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñми")
489
490 class Meta():
491 db_table = 'article'
492 ordering = ['title']
493 verbose_name = "Объект недвижимоÑти"
494 verbose_name_plural = "Объекты недвижимоÑти"
495
496 def __str__(self):
497 return self.title
498
499 def bit(self):
500 if self.image:
501 return u'<img src="%s" width="50px">' % self.image.url
502 else:
503 return "Ðет изображениÑ"
504
505 bit.short_desription= "Изображение"
506 bit.allow_tags = True
507
508
509class Comments(models.Model):
510
511 comments_article = models.ForeignKey(Article)
512 comments_text = models.TextField(verbose_name="ТекÑÑ‚ комментариÑ")
513 comments_date = models.DateField(u'date', auto_now=True)
514 comments_author = models.ForeignKey(Author)
515
516 class Meta():
517 db_table = 'comments'
518 ordering = ['comments_article']
519 verbose_name_plural = "Комментарии"
520
521 def __str__(self):
522 return self.comments_article
523
524
525
526
527ТрейÑбек
528
529
530AttributeError at /
531
532'AnonymousUser' object has no attribute 'login'
533
534Request Method: GET
535Request URL: http://127.0.0.1:8000/
536Django Version: 1.9.7
537Exception Type: AttributeError
538Exception Value:
539
540'AnonymousUser' object has no attribute 'login'
541
542Exception Location: /home/dima/PycharmProjects/project/article/views.py in articles, line 35
543Python Executable: /home/dima/virtualenves/Django/bin/python
544Python Version: 3.5.1
545Python Path:
546
547['/home/dima/PycharmProjects/project',
548 '/home/dima/PycharmProjects/project',
549 '/home/dima/virtualenves/Django/lib/python35.zip',
550 '/home/dima/virtualenves/Django/lib/python3.5',
551 '/home/dima/virtualenves/Django/lib/python3.5/plat-i386-linux-gnu',
552 '/home/dima/virtualenves/Django/lib/python3.5/lib-dynload',
553 '/usr/lib/python3.5',
554 '/usr/lib/python3.5/plat-i386-linux-gnu',
555 '/home/dima/virtualenves/Django/lib/python3.5/site-packages']
556
557Server time: Чт, 6 Окт 2016 07:09:59 +0000
558Traceback Switch to copy-and-paste view
559
560 /home/dima/virtualenves/Django/lib/python3.5/site-packages/django/core/handlers/base.py in get_response
561
562 response = self.process_exception_by_middleware(e, request)
563
564 ...
565 â–¶ Local vars
566 /home/dima/virtualenves/Django/lib/python3.5/site-packages/django/core/handlers/base.py in get_response
567
568 response = wrapped_callback(request, *callback_args, **callback_kwargs)
569
570 ...
571 â–¶ Local vars
572 /home/dima/PycharmProjects/project/article/views.py in articles
573
574 args['login'] = auth.get_user(request).login
575
576 ...
577 â–¶ Local vars
578
579Request information
580GET
581
582No GET data
583POST
584
585No POST data
586FILES
587
588No FILES data
589COOKIES
590Variable Value
591csrftoken
592
593'40eLZ7iEAHz1NhdDM1q1CVTKDQAFewyk'
594
595META
596Variable Value
597LOGNAME
598
599'dima'
600
601UPSTART_SESSION
602
603'unix:abstract=/com/ubuntu/upstart-session/1000/1307'
604
605XDG_VTNR
606
607'7'
608
609HOME
610
611'/home/dima'
612
613wsgi.url_scheme
614
615'http'
616
617XMODIFIERS
618
619'@im=ibus'
620
621XFILESEARCHPATH
622
623'/usr/dt/app-defaults/%L/Dt'
624
625XDG_SESSION_DESKTOP
626
627'ubuntu'
628
629XDG_SESSION_ID
630
631'c2'
632
633SERVER_NAME
634
635'localhost'
636
637GTK2_MODULES
638
639'overlay-scrollbar'
640
641GTK_IM_MODULE
642
643'ibus'
644
645XDG_CONFIG_DIRS
646
647'/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg'
648
649NLSPATH
650
651'/usr/dt/lib/nls/msg/%L/%N.cat'
652
653PYTHONIOENCODING
654
655'UTF-8'
656
657XDG_SEAT
658
659'seat0'
660
661SSH_AUTH_SOCK
662
663'/run/user/1000/keyring/ssh'
664
665DJANGO_SETTINGS_MODULE
666
667'project.settings'
668
669GDM_LANG
670
671'ru'
672
673wsgi.file_wrapper
674
675''
676
677INSTANCE
678
679''
680
681COMPIZ_BIN_PATH
682
683'/usr/bin/'
684
685SESSION_MANAGER
686
687'local/MSICX600:@/tmp/.ICE-unix/1555,unix/MSICX600:/tmp/.ICE-unix/1555'
688
689DESKTOP_SESSION
690
691'ubuntu'
692
693GNOME_DESKTOP_SESSION_ID
694
695'this-is-deprecated'
696
697XDG_SESSION_TYPE
698
699'x11'
700
701QT_QPA_PLATFORMTHEME
702
703'appmenu-qt5'
704
705CONTENT_LENGTH
706
707''
708
709USER
710
711'dima'
712
713COMPIZ_CONFIG_PROFILE
714
715'ubuntu'
716
717PATH
718
719'/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/dima/virtualenves/Django/bin'
720
721CLUTTER_IM_MODULE
722
723'xim'
724
725JOB
726
727'unity-settings-daemon'
728
729wsgi.input
730
731<_io.BufferedReader name=6>
732
733GPG_AGENT_INFO
734
735'/home/dima/.gnupg/S.gpg-agent:0:1'
736
737LANGUAGE
738
739'ru_UA:ru'
740
741REQUEST_METHOD
742
743'GET'
744
745HTTP_HOST
746
747'127.0.0.1:8000'
748
749wsgi.run_once
750
751False
752
753SHELL
754
755'/bin/bash'
756
757PYTHONUNBUFFERED
758
759'1'
760
761DEFAULTS_PATH
762
763'/usr/share/gconf/ubuntu.default.path'
764
765HTTP_COOKIE
766
767'csrftoken=40eLZ7iEAHz1NhdDM1q1CVTKDQAFewyk'
768
769GATEWAY_INTERFACE
770
771'CGI/1.1'
772
773SCRIPT_NAME
774
775''
776
777XDG_MENU_PREFIX
778
779'gnome-'
780
781PWD
782
783'/home/dima'
784
785SESSIONTYPE
786
787'gnome-session'
788
789QT4_IM_MODULE
790
791'xim'
792
793DISPLAY
794
795':0'
796
797LD_LIBRARY_PATH
798
799'/opt/pycharm-2016.1.2/bin:'
800
801UPSTART_EVENTS
802
803'xsession started'
804
805XDG_SESSION_PATH
806
807'/org/freedesktop/DisplayManager/Session0'
808
809SHLVL
810
811'0'
812
813XDG_DATA_DIRS
814
815'/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop'
816
817HTTP_ACCEPT_LANGUAGE
818
819'en-US,en;q=0.5'
820
821XAUTHORITY
822
823'/home/dima/.Xauthority'
824
825PYCHARM_HOSTED
826
827'1'
828
829CONTENT_TYPE
830
831'text/plain'
832
833GNOME_KEYRING_PID
834
835''
836
837HTTP_USER_AGENT
838
839'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:49.0) Gecko/20100101 Firefox/49.0'
840
841UPSTART_INSTANCE
842
843''
844
845QT_ACCESSIBILITY
846
847'1'
848
849HTTP_ACCEPT_ENCODING
850
851'gzip, deflate'
852
853HTTP_ACCEPT
854
855'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
856
857HTTP_UPGRADE_INSECURE_REQUESTS
858
859'1'
860
861TZ
862
863'UTC'
864
865wsgi.multiprocess
866
867False
868
869wsgi.multithread
870
871True
872
873GNOME_KEYRING_CONTROL
874
875''
876
877SERVER_PORT
878
879'8000'
880
881QUERY_STRING
882
883''
884
885QT_LINUX_ACCESSIBILITY_ALWAYS_ON
886
887'1'
888
889DBUS_SESSION_BUS_ADDRESS
890
891'unix:abstract=/tmp/dbus-oms3tdeAF2'
892
893GTK_MODULES
894
895'gail:atk-bridge:unity-gtk-module'
896
897GDMSESSION
898
899'ubuntu'
900
901XDG_RUNTIME_DIR
902
903'/run/user/1000'
904
905REMOTE_ADDR
906
907'127.0.0.1'
908
909XDG_SEAT_PATH
910
911'/org/freedesktop/DisplayManager/Seat0'
912
913PATH_INFO
914
915'/'
916
917REMOTE_HOST
918
919''
920
921XDG_CURRENT_DESKTOP
922
923'Unity'
924
925PYTHONPATH
926
927'/home/dima/PycharmProjects/project'
928
929QT_IM_MODULE
930
931'ibus'
932
933XDG_GREETER_DATA_DIR
934
935'/var/lib/lightdm-data/dima'
936
937SERVER_SOFTWARE
938
939'WSGIServer/0.2'
940
941CSRF_COOKIE
942
943'40eLZ7iEAHz1NhdDM1q1CVTKDQAFewyk'
944
945SESSION
946
947'ubuntu'
948
949IM_CONFIG_PHASE
950
951'1'
952
953UPSTART_JOB
954
955'unity7'
956
957GIO_LAUNCHED_DESKTOP_FILE
958
959'/usr/share/applications/jetbrains-pycharm.desktop'
960
961MANDATORY_PATH
962
963'/usr/share/gconf/ubuntu.mandatory.path'
964
965HTTP_CONNECTION
966
967'keep-alive'
968
969LANG
970
971'ru_UA.UTF-8'
972
973RUN_MAIN
974
975'true'
976
977GIO_LAUNCHED_DESKTOP_FILE_PID
978
979'1954'
980
981wsgi.errors
982
983<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
984
985wsgi.version
986
987(1, 0)
988
989SERVER_PROTOCOL
990
991'HTTP/1.1'
992
993Settings
994Using settings module project.settings
995Setting Value
996CSRF_HEADER_NAME
997
998'HTTP_X_CSRFTOKEN'
999
1000USE_L10N
1001
1002True
1003
1004SETTINGS_MODULE
1005
1006'project.settings'
1007
1008TEST_RUNNER
1009
1010'django.test.runner.DiscoverRunner'
1011
1012SILENCED_SYSTEM_CHECKS
1013
1014[]
1015
1016DEFAULT_CHARSET
1017
1018'utf-8'
1019
1020SESSION_COOKIE_NAME
1021
1022'sessionid'
1023
1024NUMBER_GROUPING
1025
10260
1027
1028SESSION_SAVE_EVERY_REQUEST
1029
1030False
1031
1032SECURE_SSL_REDIRECT
1033
1034False
1035
1036SECURE_CONTENT_TYPE_NOSNIFF
1037
1038False
1039
1040SESSION_CACHE_ALIAS
1041
1042'default'
1043
1044ABSOLUTE_URL_OVERRIDES
1045
1046{}
1047
1048STATICFILES_DIRS
1049
1050('/home/dima/PycharmProjects/project/secondapp/dev_static',)
1051
1052SECURE_HSTS_SECONDS
1053
10540
1055
1056DATE_INPUT_FORMATS
1057
1058['%Y-%m-%d',
1059 '%m/%d/%Y',
1060 '%m/%d/%y',
1061 '%b %d %Y',
1062 '%b %d, %Y',
1063 '%d %b %Y',
1064 '%d %b, %Y',
1065 '%B %d %Y',
1066 '%B %d, %Y',
1067 '%d %B %Y',
1068 '%d %B, %Y']
1069
1070LOGGING_CONFIG
1071
1072'logging.config.dictConfig'
1073
1074SECURE_PROXY_SSL_HEADER
1075
1076None
1077
1078SESSION_FILE_PATH
1079
1080None
1081
1082MONTH_DAY_FORMAT
1083
1084'F j'
1085
1086APPEND_SLASH
1087
1088True
1089
1090ALLOWED_INCLUDE_ROOTS
1091
1092[]
1093
1094USE_X_FORWARDED_HOST
1095
1096False
1097
1098TEMPLATE_DEBUG
1099
1100False
1101
1102TINYMCE_COMPRESSOR
1103
1104True
1105
1106CSRF_TRUSTED_ORIGINS
1107
1108[]
1109
1110DEFAULT_TABLESPACE
1111
1112''
1113
1114EMAIL_SUBJECT_PREFIX
1115
1116'[Django] '
1117
1118DEBUG
1119
1120True
1121
1122FILE_UPLOAD_TEMP_DIR
1123
1124None
1125
1126TIME_ZONE
1127
1128'UTC'
1129
1130SECURE_BROWSER_XSS_FILTER
1131
1132False
1133
1134EMAIL_SSL_KEYFILE
1135
1136'********************'
1137
1138TEMPLATE_STRING_IF_INVALID
1139
1140''
1141
1142EMAIL_BACKEND
1143
1144'django.core.mail.backends.console.EmailBackend'
1145
1146WSGI_APPLICATION
1147
1148'project.wsgi.application'
1149
1150ROOT_URLCONF
1151
1152'project.urls'
1153
1154PASSWORD_RESET_TIMEOUT_DAYS
1155
1156'********************'
1157
1158CACHE_MIDDLEWARE_KEY_PREFIX
1159
1160'********************'
1161
1162FILE_UPLOAD_DIRECTORY_PERMISSIONS
1163
1164None
1165
1166USE_I18N
1167
1168True
1169
1170EMAIL_USE_SSL
1171
1172False
1173
1174MIDDLEWARE_CLASSES
1175
1176['django.middleware.security.SecurityMiddleware',
1177 'django.contrib.sessions.middleware.SessionMiddleware',
1178 'django.middleware.common.CommonMiddleware',
1179 'django.middleware.csrf.CsrfViewMiddleware',
1180 'django.contrib.auth.middleware.AuthenticationMiddleware',
1181 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
1182 'django.contrib.messages.middleware.MessageMiddleware',
1183 'django.middleware.clickjacking.XFrameOptionsMiddleware']
1184
1185LOCALE_PATHS
1186
1187[]
1188
1189SHORT_DATETIME_FORMAT
1190
1191'm/d/Y P'
1192
1193TINYMCE_SPELLCHECKER
1194
1195True
1196
1197LANGUAGES
1198
1199[('af', 'Afrikaans'),
1200 ('ar', 'Arabic'),
1201 ('ast', 'Asturian'),
1202 ('az', 'Azerbaijani'),
1203 ('bg', 'Bulgarian'),
1204 ('be', 'Belarusian'),
1205 ('bn', 'Bengali'),
1206 ('br', 'Breton'),
1207 ('bs', 'Bosnian'),
1208 ('ca', 'Catalan'),
1209 ('cs', 'Czech'),
1210 ('cy', 'Welsh'),
1211 ('da', 'Danish'),
1212 ('de', 'German'),
1213 ('el', 'Greek'),
1214 ('en', 'English'),
1215 ('en-au', 'Australian English'),
1216 ('en-gb', 'British English'),
1217 ('eo', 'Esperanto'),
1218 ('es', 'Spanish'),
1219 ('es-ar', 'Argentinian Spanish'),
1220 ('es-co', 'Colombian Spanish'),
1221 ('es-mx', 'Mexican Spanish'),
1222 ('es-ni', 'Nicaraguan Spanish'),
1223 ('es-ve', 'Venezuelan Spanish'),
1224 ('et', 'Estonian'),
1225 ('eu', 'Basque'),
1226 ('fa', 'Persian'),
1227 ('fi', 'Finnish'),
1228 ('fr', 'French'),
1229 ('fy', 'Frisian'),
1230 ('ga', 'Irish'),
1231 ('gd', 'Scottish Gaelic'),
1232 ('gl', 'Galician'),
1233 ('he', 'Hebrew'),
1234 ('hi', 'Hindi'),
1235 ('hr', 'Croatian'),
1236 ('hu', 'Hungarian'),
1237 ('ia', 'Interlingua'),
1238 ('id', 'Indonesian'),
1239 ('io', 'Ido'),
1240 ('is', 'Icelandic'),
1241 ('it', 'Italian'),
1242 ('ja', 'Japanese'),
1243 ('ka', 'Georgian'),
1244 ('kk', 'Kazakh'),
1245 ('km', 'Khmer'),
1246 ('kn', 'Kannada'),
1247 ('ko', 'Korean'),
1248 ('lb', 'Luxembourgish'),
1249 ('lt', 'Lithuanian'),
1250 ('lv', 'Latvian'),
1251 ('mk', 'Macedonian'),
1252 ('ml', 'Malayalam'),
1253 ('mn', 'Mongolian'),
1254 ('mr', 'Marathi'),
1255 ('my', 'Burmese'),
1256 ('nb', 'Norwegian Bokmal'),
1257 ('ne', 'Nepali'),
1258 ('nl', 'Dutch'),
1259 ('nn', 'Norwegian Nynorsk'),
1260 ('os', 'Ossetic'),
1261 ('pa', 'Punjabi'),
1262 ('pl', 'Polish'),
1263 ('pt', 'Portuguese'),
1264 ('pt-br', 'Brazilian Portuguese'),
1265 ('ro', 'Romanian'),
1266 ('ru', 'Russian'),
1267 ('sk', 'Slovak'),
1268 ('sl', 'Slovenian'),
1269 ('sq', 'Albanian'),
1270 ('sr', 'Serbian'),
1271 ('sr-latn', 'Serbian Latin'),
1272 ('sv', 'Swedish'),
1273 ('sw', 'Swahili'),
1274 ('ta', 'Tamil'),
1275 ('te', 'Telugu'),
1276 ('th', 'Thai'),
1277 ('tr', 'Turkish'),
1278 ('tt', 'Tatar'),
1279 ('udm', 'Udmurt'),
1280 ('uk', 'Ukrainian'),
1281 ('ur', 'Urdu'),
1282 ('vi', 'Vietnamese'),
1283 ('zh-hans', 'Simplified Chinese'),
1284 ('zh-hant', 'Traditional Chinese')]
1285
1286USE_ETAGS
1287
1288False
1289
1290LANGUAGE_CODE
1291
1292'ru-ru'
1293
1294TINYMCE_DEFAULT_CONFIG
1295
1296{'cleanup': False,
1297 'cleanup_on_startup': False,
1298 'convert_newlines_to_brs': False,
1299 'external_image_list_url': 'lists/image_list.js',
1300 'external_link_list_url': 'lists/link_list.js',
1301 'file_browser_callback': 'tinyDjangoBrowser',
1302 'force_br_newlines': False,
1303 'force_p_newlines': False,
1304 'forced_root_block': False,
1305 'formats': {'aligncenter': {'classes': 'align-center',
1306 'selector': 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img'},
1307 'alignfull': {'classes': 'align-justify',
1308 'selector': 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img'},
1309 'alignleft': {'classes': 'align-left',
1310 'selector': 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img'},
1311 'alignright': {'classes': 'align-right',
1312 'selector': 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img'},
1313 'bold': {'inline': 'strong'},
1314 'italic': {'inline': 'em'},
1315 'strikethrough': {'inline': 'del'},
1316 'underline': {'inline': 'u'}},
1317 'inline_styles': False,
1318 'language': 'ru',
1319 'media_external_list_url': 'lists/media_list.js',
1320 'pagebreak_separator': '------------------------',
1321 'paste_auto_cleanup_on_paste': False,
1322 'paste_block_drop': False,
1323 'paste_data_images': True,
1324 'paste_remove_spans': False,
1325 'paste_retain_style_properties': '',
1326 'paste_strip_class_attributes': False,
1327 'plugins': 'safari,table,advlink,advimage,iespell,inlinepopups,media,searchreplace,contextmenu,paste,wordcount',
1328 'relative_urls': False,
1329 'remove_linebreaks': False,
1330 'table_default_cellpadding': 2,
1331 'table_default_cellspacing': 2,
1332 'template_external_list_url': 'lists/template_list.js',
1333 'theme': 'advanced',
1334 'theme_advanced_buttons1': 'bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect,|,spellchecker',
1335 'theme_advanced_buttons2': 'cut,copy,paste,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,image,cleanup,code,|,forecolor,backcolor,|,insertfile,insertimage',
1336 'theme_advanced_buttons3': 'tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr',
1337 'theme_advanced_resizing': True,
1338 'theme_advanced_statusbar_location': 'bottom',
1339 'theme_advanced_toolbar_align': 'left',
1340 'theme_advanced_toolbar_location': 'top'}
1341
1342LANGUAGE_COOKIE_PATH
1343
1344'/'
1345
1346EMAIL_HOST_PASSWORD
1347
1348'********************'
1349
1350SESSION_COOKIE_PATH
1351
1352'/'
1353
1354FORCE_SCRIPT_NAME
1355
1356None
1357
1358TEMPLATE_LOADERS
1359
1360['django.template.loaders.filesystem.Loader',
1361 'django.template.loaders.app_directories.Loader']
1362
1363INTERNAL_IPS
1364
1365[]
1366
1367DEFAULT_INDEX_TABLESPACE
1368
1369''
1370
1371MEDIA_URL
1372
1373'/images/'
1374
1375LANGUAGE_COOKIE_NAME
1376
1377'django_language'
1378
1379DEBUG_PROPAGATE_EXCEPTIONS
1380
1381False
1382
1383EMAIL_TIMEOUT
1384
1385None
1386
1387EMAIL_SSL_CERTFILE
1388
1389None
1390
1391LOGIN_URL
1392
1393'/accounts/login/'
1394
1395CACHE_MIDDLEWARE_ALIAS
1396
1397'default'
1398
1399DECIMAL_SEPARATOR
1400
1401'.'
1402
1403X_FRAME_OPTIONS
1404
1405'SAMEORIGIN'
1406
1407EMAIL_HOST
1408
1409'localhost'
1410
1411YEAR_MONTH_FORMAT
1412
1413'F Y'
1414
1415CSRF_COOKIE_NAME
1416
1417'csrftoken'
1418
1419AUTH_USER_EMAIL_UNIQUE
1420
1421True
1422
1423DEFAULT_CONTENT_TYPE
1424
1425'text/html'
1426
1427EMAIL_USE_TLS
1428
1429False
1430
1431SECRET_KEY
1432
1433'********************'
1434
1435MESSAGE_STORAGE
1436
1437'django.contrib.messages.storage.fallback.FallbackStorage'
1438
1439SESSION_ENGINE
1440
1441'django.contrib.sessions.backends.db'
1442
1443FILE_UPLOAD_MAX_MEMORY_SIZE
1444
14452621440
1446
1447CSRF_COOKIE_AGE
1448
144931449600
1450
1451AUTHENTICATION_BACKENDS
1452
1453('django.contrib.auth.backends.ModelBackend',)
1454
1455DATETIME_INPUT_FORMATS
1456
1457['%Y-%m-%d %H:%M:%S',
1458 '%Y-%m-%d %H:%M:%S.%f',
1459 '%Y-%m-%d %H:%M',
1460 '%Y-%m-%d',
1461 '%m/%d/%Y %H:%M:%S',
1462 '%m/%d/%Y %H:%M:%S.%f',
1463 '%m/%d/%Y %H:%M',
1464 '%m/%d/%Y',
1465 '%m/%d/%y %H:%M:%S',
1466 '%m/%d/%y %H:%M:%S.%f',
1467 '%m/%d/%y %H:%M',
1468 '%m/%d/%y']
1469
1470SITE_ID
1471
14721
1473
1474FIXTURE_DIRS
1475
1476[]
1477
1478TEMPLATE_CONTEXT_PROCESSORS
1479
1480['django.contrib.auth.context_processors.auth',
1481 'django.template.context_processors.debug',
1482 'django.template.context_processors.i18n',
1483 'django.template.context_processors.media',
1484 'django.template.context_processors.static',
1485 'django.template.context_processors.tz',
1486 'django.contrib.messages.context_processors.messages']
1487
1488LOGOUT_URL
1489
1490'/accounts/logout/'
1491
1492ALLOWED_HOSTS
1493
1494[]
1495
1496USE_THOUSAND_SEPARATOR
1497
1498False
1499
1500SECURE_REDIRECT_EXEMPT
1501
1502[]
1503
1504CAPTCHA_FONT_SIZE
1505
150640
1507
1508LANGUAGE_COOKIE_AGE
1509
1510None
1511
1512CSRF_COOKIE_HTTPONLY
1513
1514False
1515
1516SECURE_SSL_HOST
1517
1518None
1519
1520DATE_FORMAT
1521
1522'N j, Y'
1523
1524IGNORABLE_404_URLS
1525
1526[]
1527
1528DISALLOWED_USER_AGENTS
1529
1530[]
1531
1532DEFAULT_FILE_STORAGE
1533
1534'django.core.files.storage.FileSystemStorage'
1535
1536SESSION_COOKIE_HTTPONLY
1537
1538True
1539
1540SECURE_HSTS_INCLUDE_SUBDOMAINS
1541
1542False
1543
1544CSRF_COOKIE_SECURE
1545
1546False
1547
1548STATICFILES_STORAGE
1549
1550'django.contrib.staticfiles.storage.StaticFilesStorage'
1551
1552SERVER_EMAIL
1553
1554'root@localhost'
1555
1556CSRF_FAILURE_VIEW
1557
1558'django.views.csrf.csrf_failure'
1559
1560STATIC_URL
1561
1562'/static/'
1563
1564LANGUAGE_COOKIE_DOMAIN
1565
1566None
1567
1568USE_X_FORWARDED_PORT
1569
1570False
1571
1572CSRF_COOKIE_PATH
1573
1574'/'
1575
1576SESSION_SERIALIZER
1577
1578'django.contrib.sessions.serializers.JSONSerializer'
1579
1580PREPEND_WWW
1581
1582False
1583
1584SESSION_EXPIRE_AT_BROWSER_CLOSE
1585
1586False
1587
1588CAPTCHA_CHALLENGE_FUNCT
1589
1590'captcha.helpers.math_challenge'
1591
1592MEDIA_ROOT
1593
1594'/home/dima/PycharmProjects/project/media'
1595
1596SESSION_COOKIE_DOMAIN
1597
1598None
1599
1600LOGGING
1601
1602{}
1603
1604CACHES
1605
1606{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
1607
1608SESSION_COOKIE_AGE
1609
16101209600
1611
1612TIME_INPUT_FORMATS
1613
1614['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
1615
1616LANGUAGES_BIDI
1617
1618['he', 'ar', 'fa', 'ur']
1619
1620EMAIL_PORT
1621
16221025
1623
1624TEMPLATES
1625
1626[{'APP_DIRS': True,
1627 'BACKEND': 'django.template.backends.django.DjangoTemplates',
1628 'DIRS': ['/home/dima/PycharmProjects/project/templates'],
1629 'OPTIONS': {'context_processors': ['django.template.context_processors.debug',
1630 'django.template.context_processors.request',
1631 'django.contrib.auth.context_processors.auth',
1632 'django.contrib.messages.context_processors.messages']}}]
1633
1634SESSION_COOKIE_SECURE
1635
1636False
1637
1638BASE_DIR
1639
1640'/home/dima/PycharmProjects/project'
1641
1642FIRST_DAY_OF_WEEK
1643
16440
1645
1646FILE_CHARSET
1647
1648'utf-8'
1649
1650STATIC_ROOT
1651
1652'static'
1653
1654DATABASES
1655
1656{'default': {'ATOMIC_REQUESTS': False,
1657 'AUTOCOMMIT': True,
1658 'CONN_MAX_AGE': 0,
1659 'ENGINE': 'django.db.backends.sqlite3',
1660 'HOST': '',
1661 'NAME': '/home/dima/PycharmProjects/project/db.sqlite3',
1662 'OPTIONS': {},
1663 'PASSWORD': '********************',
1664 'PORT': '',
1665 'TEST': {'CHARSET': None,
1666 'COLLATION': None,
1667 'MIRROR': None,
1668 'NAME': None},
1669 'TIME_ZONE': None,
1670 'USER': ''}}
1671
1672THOUSAND_SEPARATOR
1673
1674','
1675
1676DATETIME_FORMAT
1677
1678'N j, Y, P'
1679
1680STATICFILES_FINDERS
1681
1682['django.contrib.staticfiles.finders.FileSystemFinder',
1683 'django.contrib.staticfiles.finders.AppDirectoriesFinder']
1684
1685SHORT_DATE_FORMAT
1686
1687'm/d/Y'
1688
1689FILE_UPLOAD_HANDLERS
1690
1691['django.core.files.uploadhandler.MemoryFileUploadHandler',
1692 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
1693
1694CSRF_COOKIE_DOMAIN
1695
1696None
1697
1698CACHE_MIDDLEWARE_SECONDS
1699
1700600
1701
1702TINYMCE_PLUGINS
1703
1704['safari',
1705 'table',
1706 'advlink',
1707 'advimage',
1708 'iespell',
1709 'inlinepopups',
1710 'media',
1711 'searchreplace',
1712 'contextmenu',
1713 'paste',
1714 'wordcount']
1715
1716TEMPLATE_DIRS
1717
1718[]
1719
1720AUTH_PASSWORD_VALIDATORS
1721
1722'********************'
1723
1724MIGRATION_MODULES
1725
1726{}
1727
1728TEST_NON_SERIALIZED_APPS
1729
1730[]
1731
1732LOGIN_REDIRECT_URL
1733
1734'/'
1735
1736EMAIL_HOST_USER
1737
1738''
1739
1740TIME_FORMAT
1741
1742'P'
1743
1744DEFAULT_FROM_EMAIL
1745
1746'info@google.ru'
1747
1748DEFAULT_EXCEPTION_REPORTER_FILTER
1749
1750'django.views.debug.SafeExceptionReporterFilter'
1751
1752AUTH_USER_MODEL
1753
1754'core.ExtUser'
1755
1756MANAGERS
1757
1758[]
1759
1760FORMAT_MODULE_PATH
1761
1762None
1763
1764SIGNING_BACKEND
1765
1766'django.core.signing.TimestampSigner'
1767
1768FILE_UPLOAD_PERMISSIONS
1769
1770None
1771
1772ADMINS
1773
1774[]
1775
1776PASSWORD_HASHERS
1777
1778'********************'
1779
1780INSTALLED_APPS
1781
1782['django.contrib.admin',
1783 'django.contrib.auth',
1784 'django.contrib.contenttypes',
1785 'django.contrib.sessions',
1786 'django.contrib.messages',
1787 'django.contrib.staticfiles',
1788 'core',
1789 'captcha',
1790 'tinymce',
1791 'embed_video',
1792 'mptt',
1793 'bootstrap3',
1794 'easy_thumbnails',
1795 'taggit',
1796 'precise_bbcode',
1797 'article']
1798
1799USE_TZ
1800
1801True
1802
1803DATABASE_ROUTERS
1804
1805[]
1806
1807ACCOUNT_ACTIVATION_DAYS
1808
18092