From cc1425c4956911ebdab140b5b8a798ea0e4bff01 Mon Sep 17 00:00:00 2001 From: SeninoSeno Date: Mon, 18 Dec 2023 22:24:20 +0500 Subject: [PATCH] add login by vk and some db edit --- mysite/mysite/settings.py | 13 ++++++++++ .../0002_feedback_user_fight_user.py | 26 +++++++++++++++++++ mysite/pokemoon/models.py | 3 ++- mysite/pokemoon/templates/index.html | 2 -- mysite/pokemoon/templates/pokemon.html | 3 +++ .../templates/registration/login.html | 3 +++ mysite/pokemoon/urls.py | 1 + mysite/pokemoon/views.py | 5 ++++ mysite/requirements.txt | 3 ++- 9 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 mysite/pokemoon/migrations/0002_feedback_user_fight_user.py diff --git a/mysite/mysite/settings.py b/mysite/mysite/settings.py index d7d75ea..7f3c1f9 100644 --- a/mysite/mysite/settings.py +++ b/mysite/mysite/settings.py @@ -41,8 +41,20 @@ 'django.contrib.staticfiles', 'pokemoon', 'rest_framework', + 'social_django', ] +SOCIAL_AUTH_POSTGRES_JSONFIELD = True + +AUTHENTICATION_BACKENDS = ( + 'social_core.backends.vk.VKOAuth2', + 'django.contrib.auth.backends.ModelBackend', +) + +SOCIAL_AUTH_VK_OAUTH2_KEY = os.environ.get("VK_APP_ID") +SOCIAL_AUTH_VK_OAUTH2_SECRET = os.environ.get("VK_API_SECRET") +SOCIAL_AUTH_VK_OAUTH2_SCOPE = ['email'] + REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', 'PAGE_SIZE': 25 @@ -71,6 +83,7 @@ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', + 'social_django.context_processors.backends', ], }, }, diff --git a/mysite/pokemoon/migrations/0002_feedback_user_fight_user.py b/mysite/pokemoon/migrations/0002_feedback_user_fight_user.py new file mode 100644 index 0000000..38ce15e --- /dev/null +++ b/mysite/pokemoon/migrations/0002_feedback_user_fight_user.py @@ -0,0 +1,26 @@ +# Generated by Django 4.2.8 on 2023-12-18 21:49 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('pokemoon', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='feedback', + name='user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='fight', + name='user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/mysite/pokemoon/models.py b/mysite/pokemoon/models.py index 1368327..faf7b4a 100644 --- a/mysite/pokemoon/models.py +++ b/mysite/pokemoon/models.py @@ -8,6 +8,7 @@ class Fight(models.Model): winner_id = models.IntegerField() round_count = models.IntegerField() created_at = models.DateTimeField(auto_now_add=True) + user = models.ForeignKey('auth.User', on_delete=models.CASCADE, null=True) class Pokemon(models.Model): pokid = models.IntegerField() @@ -20,7 +21,7 @@ class Feedback(models.Model): rating = models.IntegerField() text = models.TextField() created_at = models.DateTimeField(auto_now_add=True) - + user = models.ForeignKey('auth.User', on_delete=models.CASCADE, null=True) pokemon = models.ForeignKey("Pokemon", on_delete=models.CASCADE) def __str__(self): diff --git a/mysite/pokemoon/templates/index.html b/mysite/pokemoon/templates/index.html index 63b188d..e74a0f7 100644 --- a/mysite/pokemoon/templates/index.html +++ b/mysite/pokemoon/templates/index.html @@ -20,8 +20,6 @@

Pokemoon: интернет-каталог покемонов {% endif %} - -

Hi hello

diff --git a/mysite/pokemoon/templates/pokemon.html b/mysite/pokemoon/templates/pokemon.html index 116b654..44401ae 100644 --- a/mysite/pokemoon/templates/pokemon.html +++ b/mysite/pokemoon/templates/pokemon.html @@ -75,6 +75,9 @@

Отзывы и оценки

{% if feedbacks %} {% for feedback in feedbacks %}
+ {% if feedback.user %} +

Автор: {{ feedback.user }}

+ {% endif %}

Рейтинг: {{ feedback.rating }}

{% if feedback.text %}

Текст: {{ feedback.text }}

diff --git a/mysite/pokemoon/templates/registration/login.html b/mysite/pokemoon/templates/registration/login.html index 32d1c1f..3ede1d2 100644 --- a/mysite/pokemoon/templates/registration/login.html +++ b/mysite/pokemoon/templates/registration/login.html @@ -29,6 +29,9 @@ {{ form.password }} + + Login by VK + diff --git a/mysite/pokemoon/urls.py b/mysite/pokemoon/urls.py index 9ea11fe..8ac0873 100644 --- a/mysite/pokemoon/urls.py +++ b/mysite/pokemoon/urls.py @@ -15,6 +15,7 @@ path("accounts/login/prove/", views.login_prove_view, name="login_prove"), path("accounts/logout", views.logout_view, name="logout"), path("accounts/registration", views.registration_view, name="register"), + path('', include('social_django.urls')), # API ↓ path("pokemon/list", views.PokemonList.as_view()), path("pokemon/", views.PokemonInfo.as_view()), diff --git a/mysite/pokemoon/views.py b/mysite/pokemoon/views.py index 2ccfac5..cfb2720 100644 --- a/mysite/pokemoon/views.py +++ b/mysite/pokemoon/views.py @@ -67,6 +67,7 @@ def pokemon(request, name): feedbacks.append({ 'text': feedback.text, 'rating': feedback.rating, + 'user': feedback.user, }) context = { @@ -103,6 +104,8 @@ def result(request, name): fight.second_pokemon_hp = data['pc_hp'] fight.round_count = data['round_count'] fight.winner_id = data['winner_id'] + if request.user.id: + fight.user = request.user fight.save() if (data['email']): @@ -174,6 +177,8 @@ def feedback(request, name): feedback.rating = rating feedback.text = text feedback.pokemon = pokemon + if request.user.id: + feedback.user = request.user feedback.save() return HttpResponseRedirect(f"/{name}/info") diff --git a/mysite/requirements.txt b/mysite/requirements.txt index faa5860..e62d420 100644 --- a/mysite/requirements.txt +++ b/mysite/requirements.txt @@ -7,4 +7,5 @@ gunicorn djangorestframework selenium six -argon2-cffi \ No newline at end of file +argon2-cffi +social-auth-app-django \ No newline at end of file