Progress
This commit is contained in:
parent
2a98d58484
commit
f1461f0e08
@ -4,8 +4,8 @@ from django.views.generic import TemplateView
|
|||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
|
|
||||||
from bloonsa_game.models import Level
|
from bloonsa_game.models import Level, LevelRating
|
||||||
from users.models import Player, Bloonsa_LevelRating
|
from users.models import Player
|
||||||
from users.util import tag_player
|
from users.util import tag_player
|
||||||
|
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ class RateLevel(CSRFexemptTemplateView):
|
|||||||
levelId = int(request.POST.get("levelId"))
|
levelId = int(request.POST.get("levelId"))
|
||||||
level = Level.objects.get(levelId=levelId)
|
level = Level.objects.get(levelId=levelId)
|
||||||
player = Player.objects.get(user=request.user)
|
player = Player.objects.get(user=request.user)
|
||||||
ratingObject = Bloonsa_LevelRating.objects.filter(player=player,
|
ratingObject = LevelRating.objects.filter(player=player,
|
||||||
level=level).first()
|
level=level).first()
|
||||||
if ratingObject:
|
if ratingObject:
|
||||||
ratingObject.rating = rating
|
ratingObject.rating = rating
|
||||||
@ -77,7 +77,7 @@ class RateLevel(CSRFexemptTemplateView):
|
|||||||
return HttpResponse(content="OK", status=200)
|
return HttpResponse(content="OK", status=200)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
rating = Bloonsa_LevelRating.objects.create(player=player,
|
rating = LevelRating.objects.create(player=player,
|
||||||
level=level,
|
level=level,
|
||||||
rating=rating)
|
rating=rating)
|
||||||
rating.save()
|
rating.save()
|
||||||
|
|||||||
22
app/bloonsa_game/migrations/0011_levelrating.py
Normal file
22
app/bloonsa_game/migrations/0011_levelrating.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Generated by Django 5.1.6 on 2025-02-12 10:28
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('bloonsa_game', '0010_alter_author_authorid'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='LevelRating',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('rating', models.SmallIntegerField()),
|
||||||
|
('level', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bloonsa_game.level')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -35,3 +35,11 @@ class Level(models.Model):
|
|||||||
flashVarsStr = f"{seperator}".join([f"{k}={v}"
|
flashVarsStr = f"{seperator}".join([f"{k}={v}"
|
||||||
for k, v in flashVars.items()])
|
for k, v in flashVars.items()])
|
||||||
return flashVarsStr
|
return flashVarsStr
|
||||||
|
|
||||||
|
|
||||||
|
class LevelRating(models.Model):
|
||||||
|
level = models.ForeignKey(Level, on_delete=models.CASCADE)
|
||||||
|
rating = models.SmallIntegerField()
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"<{self.rating}> {self.level}"
|
||||||
@ -5,7 +5,7 @@ from django.views.generic import TemplateView
|
|||||||
from django.views.static import serve
|
from django.views.static import serve
|
||||||
|
|
||||||
from bloonsa_game.models import Level
|
from bloonsa_game.models import Level
|
||||||
from users.util import tag_player
|
from users.util import tag_player, init_player
|
||||||
|
|
||||||
|
|
||||||
class IndexView(TemplateView):
|
class IndexView(TemplateView):
|
||||||
@ -24,6 +24,9 @@ class GameView(TemplateView):
|
|||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
tag_player(request=request)
|
tag_player(request=request)
|
||||||
|
init_player(request=request)
|
||||||
|
# TODO get player object here with init_player to use in html template03.3.005
|
||||||
|
|
||||||
if type(kwargs.get("pk")) is int:
|
if type(kwargs.get("pk")) is int:
|
||||||
level = Level.objects.get(id=kwargs["pk"])
|
level = Level.objects.get(id=kwargs["pk"])
|
||||||
if level:
|
if level:
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from .models import Player, Bloonsa_LevelRating
|
from .models import Player, LevelRating
|
||||||
|
|
||||||
|
|
||||||
class PlayerAdmin(admin.ModelAdmin):
|
class PlayerAdmin(admin.ModelAdmin):
|
||||||
# These lag too much
|
# These lag too much
|
||||||
exclude = ("bloonsa_levelsPlayed", "bloonsa_levelsBeaten")
|
exclude = ("bloonsa_levelsPlayed", "bloonsa_levelsBeaten")
|
||||||
|
|
||||||
admin.site.register(Bloonsa_LevelRating)
|
admin.site.register(LevelRating)
|
||||||
admin.site.register(Player, PlayerAdmin)
|
admin.site.register(Player, PlayerAdmin)
|
||||||
|
|||||||
@ -0,0 +1,22 @@
|
|||||||
|
# Generated by Django 5.1.6 on 2025-02-12 10:28
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('bloonsa_game', '0011_levelrating'),
|
||||||
|
('users', '0010_alter_bloonsa_levelrating_level'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='player',
|
||||||
|
name='bloonsa_levelRatings',
|
||||||
|
field=models.ManyToManyField(blank=True, related_name='levelRatings', to='bloonsa_game.levelrating'),
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='Bloonsa_LevelRating',
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -2,7 +2,7 @@ from django.db import models
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from bloonsa_game.models import Level
|
from bloonsa_game.models import Level, LevelRating
|
||||||
|
|
||||||
|
|
||||||
class Player(models.Model):
|
class Player(models.Model):
|
||||||
@ -10,6 +10,7 @@ class Player(models.Model):
|
|||||||
# Savedata
|
# Savedata
|
||||||
bloonsa_levelsPlayed = models.ManyToManyField(Level, blank=True, related_name="levelsPlayed")
|
bloonsa_levelsPlayed = models.ManyToManyField(Level, blank=True, related_name="levelsPlayed")
|
||||||
bloonsa_levelsBeaten = models.ManyToManyField(Level, blank=True, related_name="levelsBeaten")
|
bloonsa_levelsBeaten = models.ManyToManyField(Level, blank=True, related_name="levelsBeaten")
|
||||||
|
bloonsa_levelRatings = models.ManyToManyField(LevelRating, blank=True, related_name="levelRatings")
|
||||||
# Logging
|
# Logging
|
||||||
creationIP = models.GenericIPAddressField()
|
creationIP = models.GenericIPAddressField()
|
||||||
latestIP = models.GenericIPAddressField()
|
latestIP = models.GenericIPAddressField()
|
||||||
@ -24,10 +25,4 @@ class Player(models.Model):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.user} - {self.latestIP}"
|
return f"{self.user} - {self.latestIP}"
|
||||||
|
|
||||||
class Bloonsa_LevelRating(models.Model):
|
|
||||||
level = models.ForeignKey(Level, on_delete=models.CASCADE)
|
|
||||||
player = models.ForeignKey(Player, on_delete=models.CASCADE)
|
|
||||||
rating = models.SmallIntegerField()
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f"{self.player.user} <{self.rating}> {self.level}"
|
|
||||||
@ -13,28 +13,27 @@ def get_ip(request):
|
|||||||
return ip
|
return ip
|
||||||
|
|
||||||
# Create a Player object for a User
|
# Create a Player object for a User
|
||||||
def init_player(request, user):
|
def init_player(request):
|
||||||
if not user.is_authenticated:
|
if not request.user.is_authenticated:
|
||||||
return
|
return
|
||||||
player = Player.objects.filter(user=user).first()
|
player = Player.objects.filter(user=request.user).first()
|
||||||
if player:
|
if player:
|
||||||
return
|
return
|
||||||
ip = get_ip(request=request)
|
ip = get_ip(request=request)
|
||||||
player = Player(user=user,
|
player = Player(user=request.user,
|
||||||
creationIP=ip,
|
creationIP=ip,
|
||||||
latestIP=ip)
|
latestIP=ip)
|
||||||
player.save()
|
player.save()
|
||||||
|
|
||||||
# Update activity timestamp and IP
|
# Update activity timestamp and IP
|
||||||
def tag_player(request, user=None):
|
def tag_player(request):
|
||||||
if not tracking:
|
if not tracking:
|
||||||
return
|
return
|
||||||
user = user or request.user
|
if not request.user.is_authenticated:
|
||||||
if not user.is_authenticated:
|
|
||||||
return
|
return
|
||||||
player = Player.objects.filter(user=request.user).first()
|
player = Player.objects.filter(user=request.user).first()
|
||||||
if not player:
|
if not player:
|
||||||
init_player(request=request, user=user)
|
init_player(request=request, user=request.user)
|
||||||
player.latestActivity = timezone.now()
|
player.latestActivity = timezone.now()
|
||||||
player.latestIP = get_ip(request=request)
|
player.latestIP = get_ip(request=request)
|
||||||
player.save()
|
player.save()
|
||||||
Loading…
Reference in New Issue
Block a user