add config for recaptcha

remotes/origin/HEAD
Max Yakovenko 8 years ago
parent 0ec255ad55
commit de94f48621
  1. 9
      .env.sample
  2. 4
      accounts_ext/admin.py
  3. 1
      accounts_ext/fixtures/accounts.json
  4. 7
      accounts_ext/forms.py
  5. 12
      accounts_ext/models.py
  6. 4
      accounts_ext/views.py
  7. 56
      eshop_project/settings/base.py
  8. 5
      eshop_project/settings/development.py.template
  9. 4
      templates/bootstrap/forms/registration.html
  10. 5
      templates/registration/registration.html

@ -17,6 +17,11 @@ DB_PASSWORD=12345678
DB_HOST=localhost DB_HOST=localhost
DB_PORT=5432 DB_PORT=5432
#RECAPTCHA SETTINGS
RECAPTCHA_DISABLE=False
RECAPTCHA_PRIVATE_KEY = 'your private key'
RECAPTCHA_PUBLIC_KEY = 'your public key'
# EMAIL SETTINGS # EMAIL SETTINGS
EMAIL_USE_TLS=True EMAIL_USE_TLS=True
EMAIL_USE_SSL=False EMAIL_USE_SSL=False
@ -26,8 +31,8 @@ EMAIL_HOST_USER=order@russian-programms.ru
EMAIL_HOST_PASSWORD=kziWUX EMAIL_HOST_PASSWORD=kziWUX
# Celery settings # Celery settings
CELERY_BROKER_URL=amqp://<user>:<pwd>@localhost:5672// CELERY_BROKER_URL=amqp://<user>:<pwd>@<host>:5672//
CELERY_RESULT_BACKEND=amqp://<user>:<pwd>@localhost:5672// CELERY_RESULT_BACKEND=amqp://<user>:<pwd>@<host>:5672//
CELERY_ACCEPT_CONTENT=application/json CELERY_ACCEPT_CONTENT=application/json
CELERY_TASK_SERIALIZER=json CELERY_TASK_SERIALIZER=json
CELERY_RESULT_SERIALIZER=json CELERY_RESULT_SERIALIZER=json

@ -5,7 +5,7 @@ from django.contrib.auth.admin import UserAdmin as BaseUserAdmin, GroupAdmin
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from import_export import resources from import_export import resources
from jet.filters import RelatedFieldAjaxListFilter, DateRangeFilter from jet.filters import DateRangeFilter
from rangefilter.filter import DateTimeRangeFilter from rangefilter.filter import DateTimeRangeFilter
from core.admin import SafeModelAdmin from core.admin import SafeModelAdmin
@ -91,7 +91,6 @@ class ProfileAdmin(admin.ModelAdmin):
list_filter = ( list_filter = (
('birthday', DateRangeFilter), ('birthday', DateRangeFilter),
) )
readonly_fields = ('first_name', 'last_name', 'phone',)
exclude = ('status',) exclude = ('status',)
def has_delete_permission(self, request, obj=None): def has_delete_permission(self, request, obj=None):
@ -106,7 +105,6 @@ class CompanyAdmin(admin.ModelAdmin):
search_fields = ('company_name', 'inn', 'ogrn'), search_fields = ('company_name', 'inn', 'ogrn'),
list_display = ('user', 'company_name', 'type') list_display = ('user', 'company_name', 'type')
list_filter = ('type',) list_filter = ('type',)
readonly_fields = ('company_name', 'inn', 'ogrn', 'type')
def has_delete_permission(self, request, obj=None): def has_delete_permission(self, request, obj=None):
return False return False

@ -0,0 +1 @@
[{"model": "accounts_ext.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$100000$AAP4DpqYKrFB$mQRKz7qi/1va3Zoh2O3g9j7wYKCBaMLz5LFrbszDNLA=", "last_login": "2018-08-12T20:46:54Z", "create_at": "2018-08-12T20:46:44.961Z", "updated_at": "2018-08-12T20:47:05.733Z", "status": 25, "is_superuser": true, "username": "dimkasp", "email": "dimkasp@mail.ru", "referral_user": null, "confirmed_at": null, "groups": [], "user_permissions": []}}]

@ -16,6 +16,9 @@ from django.contrib.auth.forms import (
UserCreationForm as UserCreationFormBase UserCreationForm as UserCreationFormBase
) )
from django.contrib.auth.forms import UsernameField from django.contrib.auth.forms import UsernameField
from snowpenguin.django.recaptcha2.fields import ReCaptchaField
from snowpenguin.django.recaptcha2.widgets import ReCaptchaWidget
from core.models import STATUS_ACTIVE from core.models import STATUS_ACTIVE
from .models import Profile, Company from .models import Profile, Company
@ -43,6 +46,8 @@ class RegistrationForm(RegistrationFormUniqueEmail):
widget=forms.TextInput(attrs={'class': 'reg__text'})) widget=forms.TextInput(attrs={'class': 'reg__text'}))
agreement = forms.BooleanField() agreement = forms.BooleanField()
captcha = ReCaptchaField(label=_(''), widget=ReCaptchaWidget())
title = _('Регистрация') title = _('Регистрация')
def clean_email(self): def clean_email(self):
@ -71,7 +76,7 @@ class RegistrationForm(RegistrationFormUniqueEmail):
'username': _('Логин'), 'username': _('Логин'),
} }
help_texts = { help_texts = {
'username': _('Не менее 5х символов'), 'username': _('Не менее 5 символов'),
} }
widgets = { widgets = {
'username': forms.TextInput(attrs={'class': 'reg__text-label'}), 'username': forms.TextInput(attrs={'class': 'reg__text-label'}),

@ -12,8 +12,9 @@ from django.utils.timezone import now as datetime_now
from registration.signals import user_activated from registration.signals import user_activated
from core.models import ( from core.models import (
AbstractStatusModel, ActualOnlyManager, STATUS_ACTIVE, CaseInsensitiveQuerySet AbstractStatusModel, ActualOnlyManager, STATUS_ACTIVE, CaseInsensitiveQuerySet,
) AbstractDateTimeModel,
City)
# Create your models here. # Create your models here.
@ -31,7 +32,7 @@ class UserManager(ActualOnlyManager, BaseUserManager):
def get_queryset(self): def get_queryset(self):
bqs = super().get_queryset() bqs = super().get_queryset()
qs = CaseInsensitiveQuerySet(self.model,bqs.query) qs = CaseInsensitiveQuerySet(self.model, bqs.query)
return qs return qs
@ -98,6 +99,9 @@ class Profile(AbstractStatusModel):
message="Phone number must be entered in the format: '+99999999999'. Up to 12 digits allowed.") message="Phone number must be entered in the format: '+99999999999'. Up to 12 digits allowed.")
phone = models.CharField(_('телефон'), validators=[phone_regex], max_length=12, blank=True, null=True) phone = models.CharField(_('телефон'), validators=[phone_regex], max_length=12, blank=True, null=True)
address = models.TextField(_('aдрес'))
city = models.ForeignKey(City, on_delete=models.SET_NULL, verbose_name=_('город'), blank=True, null=True)
@property @property
def is_valid(self): def is_valid(self):
return self.first_name and self.last_name and self.patronymic return self.first_name and self.last_name and self.patronymic
@ -128,6 +132,7 @@ class Company(AbstractStatusModel):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE, verbose_name=_('username')) user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE, verbose_name=_('username'))
company_name = models.CharField(_('компания'), max_length=255, blank=True, null=True) company_name = models.CharField(_('компания'), max_length=255, blank=True, null=True)
address = models.TextField(_('адрес'), blank=True, null=True) address = models.TextField(_('адрес'), blank=True, null=True)
city = models.ForeignKey(City, on_delete=models.SET_NULL, blank=True, null=True)
inn = models.CharField(_('ИНН'), max_length=12, blank=True, null=True) inn = models.CharField(_('ИНН'), max_length=12, blank=True, null=True)
ogrn = models.CharField(_('ОГРН'), max_length=13, blank=True, null=True) ogrn = models.CharField(_('ОГРН'), max_length=13, blank=True, null=True)
type = models.SmallIntegerField(_('тип'), choices=COMPANY_TYPE_CHOICES, default=COMPANY_TYPE_DEFAULT_CHOICE, type = models.SmallIntegerField(_('тип'), choices=COMPANY_TYPE_CHOICES, default=COMPANY_TYPE_DEFAULT_CHOICE,
@ -158,6 +163,7 @@ def create_user_profile(sender, instance, created, **kwargs):
Profile.objects.create(user=instance).save() Profile.objects.create(user=instance).save()
Company.objects.create(user=instance).save() Company.objects.create(user=instance).save()
@receiver(user_activated) @receiver(user_activated)
def save_activation_date(sender, user, request, **kwargs): def save_activation_date(sender, user, request, **kwargs):
user.confirmed_at = datetime_now() user.confirmed_at = datetime_now()

@ -21,7 +21,7 @@ from django.urls import reverse_lazy
from django.utils.http import is_safe_url, urlencode from django.utils.http import is_safe_url, urlencode
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from core.views import ProtectedView from core.views import ProtectedTemplateView
from .forms import ( from .forms import (
PasswordResetRequestForm, SetPasswordForm, RegistrationCompanyForm, PasswordResetRequestForm, SetPasswordForm, RegistrationCompanyForm,
AuthenticationForm, AuthenticationForm,
@ -160,5 +160,5 @@ class ResendActivationView(ResendActivationViewBase):
return context return context
class ProfileView(ProtectedView): class ProfileTemplateView(ProtectedTemplateView):
template_name = 'accounts_ext/index.html' template_name = 'accounts_ext/index.html'

@ -55,6 +55,9 @@ INSTALLED_APPS = [
'debug_toolbar', 'debug_toolbar',
'registration', 'registration',
'ckeditor',
'ckeditor_uploader',
'snowpenguin.django.recaptcha2',
'crispy_forms', 'crispy_forms',
'mptt', 'mptt',
'import_export', 'import_export',
@ -73,9 +76,7 @@ INSTALLED_APPS = [
'django.contrib.flatpages', 'django.contrib.flatpages',
'django.contrib.admin', 'django.contrib.admin',
# 'orders',
# 'auth_ext',
# 'discount',
] ]
MIDDLEWARE = [ MIDDLEWARE = [
@ -87,7 +88,6 @@ MIDDLEWARE = [
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
'referral.middleware.ReferralMiddleware', 'referral.middleware.ReferralMiddleware',
] ]
@ -107,10 +107,13 @@ TEMPLATES = [
'django.template.context_processors.request', 'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth', 'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages', 'django.contrib.messages.context_processors.messages',
'core.context_processors.breadcrumbs',
'contact_us.context_processors.contact_us_form', 'contact_us.context_processors.contact_us_form',
'products.context_processors.product_search_form', 'products.context_processors.product_search_form',
'products.context_processors.product_root_categories', 'products.context_processors.product_fitler_formset',
# 'cart.context_processors.cart', 'products.context_processors.product_categories',
'products.context_processors.product_manufacture_list',
'cart.context_processors.cart_basket',
], ],
}, },
}, },
@ -141,6 +144,11 @@ DATABASES = {
} }
} }
# RECAPTCHA SETTINGS
RECAPTCHA_DISABLE = env.bool("RECAPTCHA_DISABLE")
RECAPTCHA_PRIVATE_KEY = env.str("RECAPTCHA_PRIVATE_KEY")
RECAPTCHA_PUBLIC_KEY = env.str("RECAPTCHA_PUBLIC_KEY")
# DJANGO REGISTRATION PACKAGE SETTINGS # DJANGO REGISTRATION PACKAGE SETTINGS
ACCOUNT_ACTIVATION_DAYS = env.int('ACCOUNT_ACTIVATION_DAYS',default=3) ACCOUNT_ACTIVATION_DAYS = env.int('ACCOUNT_ACTIVATION_DAYS',default=3)
ACTIVATION_EMAIL_HTML = 'emails/html/activation_email.html' ACTIVATION_EMAIL_HTML = 'emails/html/activation_email.html'
@ -264,7 +272,7 @@ USE_L10N = True
USE_TZ = True USE_TZ = True
# Static files (CSS, JavaScript, Images) # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/ # https://docs.djangoproject.com/en/2.0/howto/static-files/
STATIC_URL = '/static/' STATIC_URL = '/static/'
@ -278,16 +286,48 @@ MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "assets", "media") MEDIA_ROOT = os.path.join(BASE_DIR, "assets", "media")
# CKEDITOR CONFIG
CKEDITOR_UPLOAD_PATH = "uploads/"
CKEDITOR_IMAGE_BACKEND = "pillow"
CKEDITOR_UPLOAD_SLUGIFY_FILENAME = True
CKEDITOR_FILENAME_GENERATOR = 'utils.get_filename'
CKEDITOR_CONFIGS = {
'awesome_ckeditor': {
'skin': 'moono-lisa',
'toolbar': 'advanced',
'allowedContent': True,
},
}
#CART SESSION KEY
CART_SESSION_ID = 'cart' CART_SESSION_ID = 'cart'
# for import-export excel data # for import-export excel data
IMPORT_EXPORT_USE_TRANSACTIONS = True IMPORT_EXPORT_USE_TRANSACTIONS = True
# PAGINATION SETTINGS # PAGINATION SETTINGS
DEFAULT_PAGE_AMOUNT = 10 DEFAULT_PAGE_AMOUNT = 1
# DEFAULT REFERRAL POINTS # DEFAULT REFERRAL POINTS
DEFAULT_REFERRAL_POINTS = 120 DEFAULT_REFERRAL_POINTS = 120
# CASHBACK RATIO IN PERCENTAGE # CASHBACK RATIO IN PERCENTAGE
CASHBACK_RATIO = 4 CASHBACK_RATIO = 4
# REQUISITES
SUPPLIER_INFO = '''ООО "Русские Программы", ИНН 7713409230, КПП 771301001,
127411, Москва г, Дмитровское ш., дом 157, корпус 7, тел.: +74957258950'''
PAY_REQUISITES = {
'name': 'ООО "Русские Программы"',
'bank': 'АО "СМП БАНК" Г. МОСКВА',
'INN': '7713409230',
'KPP': '771301001',
'BIK': '44525503',
'bank_acc': '30101810545250000503',
'acc': '40702810300750000177',
'sup_info': SUPPLIER_INFO
}

@ -1,4 +1,5 @@
from .base import * from .base import *
INTERNAL_IPS = ('127.0.0.1', )
# Debug toolbar # Debug toolbar
DEBUG_TOOLBAR_PANELS = ( DEBUG_TOOLBAR_PANELS = (
@ -16,4 +17,8 @@ DEBUG_TOOLBAR_PANELS = (
'debug_toolbar.panels.redirects.RedirectsPanel', 'debug_toolbar.panels.redirects.RedirectsPanel',
) )
MIDDLEWARE = MIDDLEWARE + [
'debug_toolbar.middleware.DebugToolbarMiddleware',
]
DEFAULT_FROM_EMAIL = 'order@russian-programms.ru' DEFAULT_FROM_EMAIL = 'order@russian-programms.ru'

@ -12,7 +12,9 @@
и возврата товаров и возврата товаров
</div> </div>
{% else %} {% else %}
{{ field.label }}{% if field.field.required %}<span class="require">*</span>{% endif %} {% if field.label %}
{{ field.label }}{% if field.field.required %}<span class="require">*</span>{% endif %}
{% endif %}
{% endif %} {% endif %}
</div> </div>
<div class="col-sm-6 col-6"> <div class="col-sm-6 col-6">

@ -1,7 +1,10 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% load recaptcha2 %}
{% block title %}{{ form.title }}{% endblock %} {% block extra_head_content %}
{% recaptcha_init 'ru' %}
{% endblock extra_head_content %}
{% block content %} {% block content %}
<div class="col-12"> <div class="col-12">

Loading…
Cancel
Save