Django community: RSS
This page, updated regularly, aggregates Django Q&A from the Django community.
-
Web Socket connection failed
On my website i am using Django, the WebSocket works fine on localhost but when i push it to VPS (Virtual private server) i get the error of WebSocket connection to wss://domain_name/ws/admin/pending/products/ failed. this is my asgi.py: import os import django from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application import api.routing os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Naviguih_backend.settings") django.setup() application = ProtocolTypeRouter( { "http": get_asgi_application(), "websocket": AuthMiddlewareStack(URLRouter(api.routing.websocket_urlpatterns)), } ) and my routing.py: from django.urls import path from .consumers import AdminNotificationConsumer, NotificationConsumer websocket_urlpatterns = [ path("ws/notifications/", NotificationConsumer.as_asgi()), path("ws/admin/pending/products/", AdminNotificationConsumer.as_asgi()), ] I read some solutions that says you need to configure the Nginx to forward port and here is my configuration: server { server_name domain_name; client_max_body_size 25M; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /ws/ { proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = domain_name) { return 301 … -
Python django model not pulling the table name, returning the project name instead
I have created both a django and a python project directory structure is analysis db_router models settings urls wsgi settings compareTemplates apps models tests utils views My model looks like this class Plans(models.Model): PROJECT_NAME = models.TextField() class Meta: db_table = 'schema.table' # specify the schema and table name managed = False # Prevent Django from managing the table schema def __str__(self): return self.PROJECT_NAME I have the database set up properly in the settings file and I am trying to see if my model can connect to it I ran: python manage.py shell from compareTemplate.models import Plans print(Plans._meta.db_table) the value returned is "compareTemplate_plans" I was not expecting that, I was looking for "schema.Table" This is my first real app in django, but I cannot figure out why the result is the project name. Thanks -
Unsupported lookup 'phone_number' for ForeignKey or join on the field not permitted on Multi Table inherited django models
I've 2 models here, BaseTransaction and AccountTransaction. Each of them are seperate model. But I've created AcccountTransaction model by inheriting BaseTransaction. Each of them has tables. Problem is when I add any field of BaseTransaction to AccountTransaction admin and try to search it's returning error below in title. class BaseTransaction(mixins.DeviceForTransactionMixin): """ Base class for transactions. """ # Choices: Debit (income) or Credit (expense) # NOTE: Income means the transactions to wallet transaction_type = models.CharField( choices=choices.TransactionType.choices, max_length=6, default=choices.TransactionType.CREDIT, db_index=True, ) # Choices: Auto or Manual # Auto: Automatically transfer the money to the GasMeter by cron job # Manual: Manually transfer the money to the GasMeter by user transfer_type = models.CharField( choices=choices.TransferType.choices, max_length=6, default=choices.TransferType.MANUAL, db_index=True, ) # Choices: Pending, On hold, Success, Failed, Canceled # Pending: The transaction is pending (on created) # On hold: The transaction is on hold (on hold) # Success: The transaction is successful (success) # Failed: The transaction is failed (failed) # Canceled: The transaction is canceled (canceled) status = models.CharField( choices=choices.TransactionStatus.choices, max_length=8, default=choices.TransactionStatus.PENDING, db_index=True, ) # To find out where the money came from # Choices: Card, Wallet source = models.CharField( choices=choices.TransactionSource.choices, max_length=8, db_index=True, ) # To find out where the money went # Choices: … -
Adding inlines to existing User model changes User admin pages
I have Domain model with a many-to-many user field to the existing User model. I want a Domain select field when I Add or Change a User on these User Admin pages. I used admin.TabularInline to achive this. The attached images show how changed the Add page after add inlines to the code. The minimal fieldset extended to a full fieldset what Django uses when someone edits an existing user, and the fieldsets completely mixed compared to the original page without inlines. Original Add User page The changed Add User page This is the actual code I tried, and the image above shows the working inlines with the Domain field, but I don't want to change the rest of the page. I'm satisfied with the existing Django User model and templates, I don't want a Custom User model and templates either, if I can avoid that. # model.py from django.db import models from django.contrib.auth.models import User from django.utils.translation import gettext as _ class Domain(models.Model): domain = models.CharField(_('Domain name'), max_length=100) master_dns_server = models.CharField(_('Master DNS server'), max_length=100, blank=True, default='') updatekey_secret = models.CharField(_('Key'), max_length=255, blank=True, default='') updatekey_name = models.CharField(_('Key name'), max_length=50, blank=True, default='') updatekey_algorythm = models.CharField(_('Key algorythm'), max_length=50, blank=True, default='') last_transfer = models.DateTimeField(_('Last … -
how can I save and continue if WebDriverWait did not find the class
I want that if WebDriverWait didn’t find what it was looking for, continue the cycle and save it in the database, I tried giving the src_iframe variable and checking if not src_iframe but it didn’t help ` try: drivers.get(film_url) iframe = WebDriverWait(drivers, 8).until( ec.presence_of_element_located((By.ID, "cinemaplayer-iframe")) ) src_iframe = WebDriverWait(drivers, 8).until( lambda d: iframe.get_attribute('src') != '' ) if not src_iframe: film_instance.is_completed2 = True film_instance.save() continue ` -
Large file download fails on slow network using HTTP/2 and AWS ALB
Given the following architecture: client <-> AWS ALB <-> uwsgi <-> Django The client fails to download a 12MB file when using HTTP/2 (the default), but works using HTTP/1.1. The file is streamed through Django for authentication purposes (it's fetched from a third party service). Here is an example of failure (I'm using a Socks proxy to limit bandwidth): $ curl -x socks5://localhost:1080 https://example.com/file.pdf --output "file.pdf" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 79 12.6M 79 10.0M 0 0 61254 0 0:03:36 0:02:51 0:00:45 64422 curl: (92) HTTP/2 stream 1 was not closed cleanly: PROTOCOL_ERROR (err 1) However the same command with the flag --http1.1 works fine. This fails when I limit downloads to 512kbps - it works at 1024Kbps. I've not looked for the sweet spot, it's not important. Notes: This also fails with a browser, it's not a curl issue Using curl with -v doesn't give any additional information. uwsgi does not output any errors. As far as it's concerned it did it's job. This is the output: [pid: 44|app: 0|req: 2603/9176] [ip] () {34 vars in 639 bytes} [Wed Oct 16 09:29:29 2024] GET /file.pdf => … -
Django Authentication Timeout Error (H12) on Heroku with MongoDB Atlas
I have a question regarding an issue I'm facing. I built an authentication system in Django and connected it to a MongoDB Atlas database. The website is deployed on Heroku, but I'm encountering a timeout error on Heroku (Error H12). I've already checked the database connection, and it seems to be working. I also changed the timeout duration to 60 and 120 seconds, but neither resolved the issue. What could be causing this error? ERROR MESSAGE : heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/" host=XXXX (i changed my host name).herokuapp.com request_id=3f41-4c44-8740-a56e6191eb53 fwd="xx.xx.xx.xxx" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0 protocol=https I checked the MongoDB Atlas connection, and it appears to be working fine. I also adjusted the timeout settings, increasing the timeout to 60 and 120 seconds, hoping this would resolve the H12 error on Heroku. However, I was expecting the website to load properly without timing out, but the issue persists despite these changes. -
How can I obtain Session Variables if the sessions change after an api call?
I am going through an official example of how to implement Oauth2 for using the quickbooks API. I am having trouble getting the state_token from the session variables within the callback view. Whenever I ise the oauth view it sends an authorization request to the quickbooks server. The request gives me a state token and a url to use to get an authorization code to use other APIs in quickbooks. I was able to print the state token in the oauth view by just printing "request.session['state']". This lets me now that it is being saved in the session. So when I redirect to the given url, Quickbooks sends me a code with the same state_token it gave me using the callback view in this example. The callback endpoint is requested by the Quickbooks server for validation purposes to make sure the state_token given back and the state_token in the session are the same, otherwise it'll return an error. This callback endpoint was given by me to Quickbooks website. But whenever I try and retreive the state_token within the callback view, it is always null/None. So whenever the callback view checks if the state tokens are the same in state_tok != … -
Adding users to my circle.so communtiy using API
is it possible to add users to my Circle.so community using api? I don't understand the documentation regarding this. if it is possible, how would i go about it? -
nginx fails to start for readonly filesystem
i am trying to configure nginx but by default it creates some directories at location /var/lib/nginx , /etc/nginx i am looking for nginx to create these directories at a different location eg /tmp other than /var/lib , as /tmp is mounted as a different volume in the setup which i have currently where the filesystem is set to be readonly and when the filesystem is set to be readonly nginx fails with the error unable to mkdir() How can i configure nginx to do so ? i am able to add locations for access , error , body , fastcgi , scgi and uwsgi Here is my conf file which has been modified to -
Error in drf-social-oauth2 framework operation
According to the documentation created an Application with default settings. Then I configured python_social_auth, but when calling http://127.0.0.1:8000/auth/login/vk-oauth2/ I get an error ValueError at /auth/login/vk-oauth2/ not enough values to unpack (expected 2, got 1) Exception Location: ..\.venv\Lib\site-packages\social_core\utils.py, line 58, in module_member This is the function where everything stops: def module_member(name): mod, member = name.rsplit(‘.’, 1) module = import_module(mod) return getattr(module, member) How can I fix further work? -
Django change on_delete at runtime
Story I am making a Jurnal app. Currently working on synchronization across multiple machines. I want to synchronize model by model, not the whole database at once. I even allow synchronization of just a few entries, image: The current problem I am facing is replacing the data of a model with the new synchronized data. I have the new database for the model (not all models) in JSON. Other models have ForeginKey to the data being changed (with on_delete=CASCADE). I have a mapping as a dict {old_pk : new_pk...}. I will use that to update other objects ForeginKeys to the objects being synchronized (whose pks will change). Problem I want to delete the old database without CASCADEing the deletion. I would like to set on_delete to DO_NOTHING temporarily until I finish the migration. Note: ReadAt code contains: read_by = models.ForeignKey( Person, on_delete=models.CASCADE, # change temporarily to DO_NOTHING at runtime ) By changing on_delete at runtime I could do: # DELETE OLD DATA ReadAt.on_delete=DO_NOTHING # pseudo code I want to achieve Person.objects.all().delete() # without code above, this deletes all ReadAt # LOAD NEW DATA with open("person_file.json", mode="w+", encoding="utf-8") as myfile: myfile.write(json.dumps(data_new_server)) call_command("loaddata", "person_file.json") # Then fix the PKs of ReadAt with … -
Django Azure Web App receiving 'Bad Request (400)' when accessed via the custom domain but works with the Azure provide default domain
I am deploying a Django Azure Web App and have added a custom domain that I bought off GoDaddy to it. I have also bound an SSL certificate provided by Azure to it. When I access the website via the default Azure domain, I'm able to access it but from the custom domain the server returns a 400 Bad Request. I've added to the list of CSRF_TRUSTED_ORIGINS as well as ALLOWED_HOSTS list the default domain as well as the custom domain. I have selected from the configuration on Azure Web App the option to redirect HTTP request to HTTPS. I have also added the DNS records (A and TXT) in GoDaddy to point to the server's public IP. May I have suggestions on things I could do to get it working? I am a novice at this and it's my first time setting up a website. I tried the following HTTPS settings in the settings.py file but it hasn't worked out, and I'm not too sure if I'm approaching it right either, thought I'd give it a go. SECURE_SSL_REDIRECT = True SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') SECURE_BROWSER_XSS_FILTER = True SECURE_CONTENT_TYPE_NOSNIFF = True X_FRAME_OPTIONS = 'DENY' … -
VS code Python Django debugger dont stop on breakpoints
Config: "version": "0.2.0", "configurations": [ { "name": "Python Debugger: Django", "type": "debugpy", "request": "launch", "program": "${workspaceFolder}/anfisa1sprint-master/anfisa_for_friends/manage.py", "args": [ "runserver" ], "justMyCode": false, "stopOnEntry": true, "django": true, "autoStartBrowser": true } ] } When i start debugger it starts the server, but i dont see any information in logs when i browse http://127.0.0.1:8000/ no logs at all about requests, status codes etc in the terminal. When i trying to trigger view (via visiting http://127.0.0.1:8000/about/ for example) it does not stop at breakpoints at all but opens the page on browser correctly -
Redirecting after making PUT request: can I redirect with GET request instead?
For my Django project, I have a primary model, Book, and an associated BookViewSet (from Django REST Framework). From the frontend, it's possible to edit other objects like Page, which POSTs to a corresponding PageViewSet. Changes to Page objects will also affect the Book, so I want to return an updated BookViewSet after processing changes to the Page. After processing a PUT request for the Page via the PageViewSet, I've tried leveraging the redirect shortcut to send the request to the BookViewSet, like this: return redirect('/books/10', pk=book_id) I expected (and hoped) this would make a GET request so that the backend would return an updated Book via the BookViewSet using the "retrieve" method. However, it seems like the BookViewSet still receives PUT request, which means the request will be sent to the BookViewSet's "update" method. Is this expected? If so, is there a way I can "get" an updated Book view after making changes to Page? I can achieve this by putting that logic into the BookViewSet's "update" method, but I already have that logic in the "retrieve" method and don't want to duplicate it. I recently found this pattern described as "post, redirect, get" and am not sure if … -
migrations.RunPython are not executed during pytest tests
I have a Django migration: # Generated by Django 3.2 on 2024-10-15 11:05 import django.db.models.deletion from django.conf import settings from django.db import migrations, models def populate_recognition_states(apps, schema_editor): RecognitionState = apps.get_model('masterdata', 'RecognitionState') RecognitionState(code='recognition', name='Recognition').save() RecognitionState(code='timeout', name='Timeout').save() def populate_recognition_settings(apps, schema_editor): raise RecognitionSettings = apps.get_model('masterdata', 'RecognitionSettings') RecognitionSettings(waiting_time=300).save() class Migration(migrations.Migration): dependencies = [ ... ] operations = [ migrations.CreateModel( name='RecognitionSettings', fields=[ ('id', models.AutoField(...), ('waiting_time', models.PositiveIntegerField()), ], ), migrations.CreateModel( name='RecognitionState', fields=[ ('id', models.AutoField(...), ('code', models.CharField(...)), ('name', models.CharField(...)), ], ), migrations.RunPython(populate_recognition_settings), migrations.RunPython(populate_recognition_states), ] The problem with it is that populate_recognition_settings and populate_recognition_states are not being ran during pytest tests. You could notice that inside populate_recognition_settings there is raise but nothing fails. Deps: pytest 7.2.0 pytest-cov 3.0.0 pytest-django 4.5.2 pytest-forked 1.3.0 pytest-mock 3.6.1 pytest-xdist 2.2.1 Django 3.2 Why data migrations are not being applied? And how to fix it? -
Django (s3) doesn't use custom domain for statics
I have S3 object storage with a CDN infront of it (on DigitalOcean). I have pointed my domain cdn.domain.com to the cdn & this is working fine. In Django I am using django-storages[s3] to connect with S3 and store static files. This works and static files are being transferred to my bucket on running collectstatic. Whenever I try to access any file the url doesn't get built properly. On localhost it looks like this http://127.0.0.1/http//cdn.domain.com. I have a modified implementation of the S3Storage to automatically handle ACLs based on my configuraton. import fnmatch from django.conf import settings from storages.backends.s3 import S3Storage class StorageBackend(S3Storage): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.default_acl = getattr(settings, "AWS_DEFAULT_ACL", "private") self.default_cache_control = getattr( settings, "AWS_S3_OBJECT_PARAMETERS", {} ).get("CacheControl", "max-age=86400") self.public_folders = getattr(settings, "S3_PUBLIC_FOLDERS", {}) def _save(self, name, content): self.default_acl = self._get_acl(name) self.object_parameters = {"CacheControl": self._get_cache_control(name)} return super()._save(name, content) def _get_acl(self, name): for folder, config in self.public_folders.items(): if self._match_pattern(name, folder): if "files" not in config or not config["files"]: return "public-read" for pattern in config["files"]: if self._match_pattern(name, pattern): return "public-read" return "private" def _get_cache_control(self, name): for folder, config in self.public_folders.items(): if self._match_pattern(name, folder): if "cache" in config: if "files" not in config or not config["files"]: return config["cache"] for pattern … -
How can I use if else statements with multiple blocks in Django templates?
I want to load different meta tags based on the context data I receive. As you can see, in case 1, I retrieve the name from '2. name', while in case 2, it comes from 'name'. When I use this if-else statement, I encounter an error stating that the use of multiple blocks is not allowed. {% extends 'base.html' %} {% load static %} {% load custom_filters %} {% if context.api_name == 'case 1' %} {% block meta_keywords %} <meta name="keywords" content="some keywords"> {% endblock %} {% block meta_description %} <meta name="description" content="{{ context.json_data | get_key:'2. name' |default:'Unknown' }}"> {% endblock %} {% elif context.api_name == "case 2" %} {% block meta_keywords %} <meta name="keywords" content="some keywords"> {% endblock %} {% block meta_description %} <meta name="description" content="{{ context.json_data | get_key:'name' |default:'Unknown' }}"> {% endblock %} {% endif %} TemplateSyntaxError django.template.exceptions.TemplateSyntaxError: 'block' tag with name 'meta_keywords' appears more than once I also tried using with to set temporary variables, but I couldn't get it to work -
Django pagination "infinity scroll" with HTMX incorect insert order
I'm trying to implement pagination known as "infinite scroll" with HTMX. All works fine except ordering of newly inserted objects not always correct. For example if view paginate_by = 10 then first 10 objects ordered as expected and next 10 objects will be inserted with some order failures: 7-8 object are ordered as expected and rest 2 object which supposed to be on top of the table inserted in the end. View: class ShippedProductListView(ListView): model = models.Product context_object_name = "products" paginate_by = 10 ordering = ['-shipment__shipment_date'] def get_queryset(self): queryset = models.Product.objects.filter(status=models.ProductStatus.SENT) return queryset def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['total_count'] = self.get_queryset().count() return context HTML: <table> <!-- some content here --> <tbody> {% include "production/shipped_products_table.html" with products=products %} <!-- Shipped products table updates with htmx --> </tbody> </table> shipped_products_table.html: {% for d in products %} {% if forloop.last %} <tr hx-trigger="revealed" hx-get="{% url 'shipped_products_list' %}?page={{ page_obj.number|add:1 }}" hx-swap="afterend" h > {% else %} <tr> {% endif %} <tr> <td><a class="link-success" href="{% url 'products_detail' sn=d.serial_number %}">{{ d.serial_number }}</a></td> <!-- some more content here --> </tr> {% empty %} <h5 class="pt-4">Nothing here yet.</h5> {% endfor %} Is that a normal behavior or I'm missing something? -
Problem running Django crontab in Docker container
I'm trying to create a simple cron, in my django application, but despite adding and launching correctly, the cron doesn't execute, nor does it save logs settings.py INSTALLED_APPS = [ 'django_crontab', ] CRONJOBS = [ ('*/1 * * * *', 'myapp.cron.test_func', '>> /var/log/cron.log 2>&1'), ] Dockerfile python:3.12 ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 WORKDIR /app COPY requirements.txt . RUN pip3 install --upgrade pip RUN pip3 install --no-cache-dir -r requirements.txt RUN apt-get update && \ apt-get install -y cron && \ apt-get clean RUN touch /var/log/cron.log docker-entrypoint.sh python3 manage.py crontab add service cron start exec "$@" When the container is launched, the commands return these results: crontab -l */1 * * * * /usr/local/bin/python3 /app/manage.py crontab run <cron_id> >> /var/log/cron.log 2>&1 # django-cronjobs for my_project python3 manage.py crontab show <cron_id> -> ('*/1 * * * *', 'myapp.cron.test_func', '>> /var/log/cron.log 2>&1') service cron status cron is running. Manually running cron with the command “python3 manage.py crontab run <cron_id>” works fine, the logs are empty. -
Coda docs webhooks and django
I am building a web application with Django and I'm trying to automate the fetching of new data from Coda Docs. I want to use web hooks so that when rows are added on the Coda docs, my code for fetching the new data is executed. Already, I have a scheduled task that works, but I'd like to just switch to web hooks as it is automatic. I am confused on how to go about this. I don't understand what I'm reading online on Coda API regarding this. I don't even understand the step 1 and step 2 set up. I tried using match.com and despite providing my api key with read and write access it couldn't fetch the table. How would one go about writing Django code for implementing web hook that triggers retrieval of the latest data from Coda docs once a change has been made on the table? -
Dynamically Show/Hide Django Admin Inline Forms Based on Dropdown Selection
I'm trying to dynamically show and hide inline forms in the Django admin based on a dropdown selection. I have two inline forms: one for IndividualCustomer and another for CorporateCustomer. The goal is for the corresponding inline to appear when a specific customer type is selected from the dropdown. Here’s what I’ve set up: Models: I have defined IndividualCustomer, CorporateCustomer, and Customer models. Admin: I've created inlines for both customer types and included them in the CustomerAdmin class. Custom Template: I’m using a custom change_form.html to implement the JavaScript logic. Models and Admin Code: # models.py from django.db import models class Customer(models.Model): CUSTOMER_TYPE_CHOICES = [ ('Individual', 'مشتری حقیقی'), ('Corporate', 'مشتری حقوقی'), ] customer_type = models.CharField(max_length=20, choices=CUSTOMER_TYPE_CHOICES) class IndividualCustomer(models.Model): customer = models.OneToOneField(Customer, on_delete=models.CASCADE) # Other fields... class CorporateCustomer(models.Model): customer = models.OneToOneField(Customer, on_delete=models.CASCADE) # Other fields... # admin.py from django.contrib import admin from .models import Customer, IndividualCustomer, CorporateCustomer class IndividualCustomerInline(admin.StackedInline): model = IndividualCustomer extra = 0 class CorporateCustomerInline(admin.StackedInline): model = CorporateCustomer extra = 0 @admin.register(Customer) class CustomerAdmin(admin.ModelAdmin): inlines = [IndividualCustomerInline, CorporateCustomerInline] Custom Template (change_form.html): {% extends "admin/change_form.html" %} {% load i18n static %} {% block after_field_sets %} {{ block.super }} <style> .inline-group { margin-bottom: 20px; } </style> <script> document.addEventListener('DOMContentLoaded', function () { … -
Django Admin panel css not align
enter image description hereDjango admin CSS is not working as expected. As seen in the attached screenshot, the search box is misaligned. I need the search box to be properly aligned above the model data in the admin interface. Steps I've already tried: I have run collectstatic to make sure all static files are gathered. I cleared the cache to ensure no old files were affecting the layout. I verified that the custom CSS is correctly linked and applied, but the search box is still not aligning as needed. Details: Django version: 4.2.16 Issue: The search box appears out of alignment, and I want it to be positioned at the top, above the model data table. I would appreciate guidance on how to adjust the CSS or admin template to fix the alignment issue. -
Django Channels - Route not found
I have been grinding on this from past 4 days and still couldn't get the websockets connected , it always shows Not found : ws/play/testroomcode This is my consumers.py: from channels.generic.websocket import WebsocketConsumer from asgiref.sync import async_to_sync import json class GameRoom(WebsocketConsumer): def connect(self,event): print('Websocket Received...',event) self.room_name = self.scope['url_route']['kwargs']['room_code'] self.room_group_name = 'room_%s' % self.room_name print(self.room_group_name) async_to_sync(self.channel_layer.group_add)( self.room_group_name, self.channel_name ) self.accept() def receive(self,event): print('Websocket Received...',event) def disconnect(self,event): print('Websocket Disconnected...',event) game/asgi.py import osfrom django.core.asgi import get_asgi_applicationfrom channels.routingimport ProtocolTypeRouter, URLRouterfrom channels.auth import AuthMiddlewareStackfrom app1 import routing # Import your routingfrom app1.consumers import GameRoomfrom django.urls import path os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'game.settings')websocket_urlpatterns = [path('ws/play/<room_code>', GameRoom.as_asgi()),] application = ProtocolTypeRouter({'http': get_asgi_application(),'websocket': AuthMiddlewareStack(URLRouter(websocket_urlpatterns)),}) game/settings.py INSTALLED_APPS = ['channels','django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app1', ] ASGI_APPLICATION = 'game.asgi.application' #WSGI_APPLICATION = 'game.wsgi.application' CHANNEL_LAYERS = {"default": {"BACKEND": "channels_redis.core.RedisChannelLayer","CONFIG": {"hosts": [("127.0.0.1", 6379)], # Use quotes around the IP address},},} I have tried following every YouTube tutorial nothing works for me, installed django, channel, channel-redis , virtual environment like every possible thing on internet but still got no where on how to connect it. Read all the solutions on Stack overflow that have similar errors like mine but none of them works for me. -
Can you set permission classes per function in class-based views?
Let's say we have the following class-based view (CBV) implementing DRF's APIView: class ExampleListAPIView(APIView): permission_classes = [IsAuthenticatedOrReadOnly] def get(self, request): ''' List all examples ''' examples = Example.objects.all() serializer = ExampleListSerializer(examples, many=True) return Response(serializer.data, status.HTTP_200_OK) def post(self, request): ''' Create new example ''' serializer = ExampleListSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) Using permission_classes to set authentication policy in CBV, the policy is applied to all methods of class. Is it possible to set permission per function in a CBV, e.g. class ExampleListAPIView(APIView): def get(self, request): # Apply [AllowAny] # logic def post(self, request): # Apply [IsAuthenticated] # logic Or you have to use function-based views to achieve this behavior?