{"id":14972627,"url":"https://github.com/codyparker/channels-obstruction","last_synced_at":"2025-10-26T19:31:39.315Z","repository":{"id":40643628,"uuid":"69293799","full_name":"codyparker/channels-obstruction","owner":"codyparker","description":"A simple game of Obstruction created to explore Django + Django Channels + ReactJS","archived":false,"fork":false,"pushed_at":"2018-09-28T00:56:34.000Z","size":272,"stargazers_count":96,"open_issues_count":0,"forks_count":40,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-01-31T23:03:10.022Z","etag":null,"topics":["django-channels","django-framework","reactjs"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codyparker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-09-26T21:19:55.000Z","updated_at":"2024-11-02T05:58:57.000Z","dependencies_parsed_at":"2022-09-07T01:50:46.328Z","dependency_job_id":null,"html_url":"https://github.com/codyparker/channels-obstruction","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codyparker%2Fchannels-obstruction","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codyparker%2Fchannels-obstruction/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codyparker%2Fchannels-obstruction/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codyparker%2Fchannels-obstruction/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codyparker","download_url":"https://codeload.github.com/codyparker/channels-obstruction/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238394323,"owners_count":19464583,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django-channels","django-framework","reactjs"],"created_at":"2024-09-24T13:47:14.275Z","updated_at":"2025-10-26T19:31:38.803Z","avatar_url":"https://github.com/codyparker.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# channels-obstruction\nA simple game of Obstruction created to explore Django + Django Channels + ReactJS\nBlog Post and Tutorial at: [http://www.codyparker.com/django-channels-with-react](http://www.codyparker.com/django-channels-with-react)\n\n\n## Synopsis\n\nI started this project to explore the [Django Channels](https://github.com/django/channels), which is an upcoming core app that adds asynchronous WebSocket support to the wonderful [Django Framework](http://www.djangoproject.com). Channels makes it very easy to build \"real-time\" apps in pure Django and Python, providing a great way to develop applications that require features such as \"real-time\" collaboration or chat for example.  \n\n[Obstruction](http://www.papg.com/show?2XMX) is a 2-player pen and paper game which involves players taking turns claiming free spots on a grid. The spot they choose, and all surrounding spots are then claimed for that player and can no longer be claimed by another player. The play continues back-and-forth until there are no free spots to claim. The last player to successfully claim a spot, wins the game.\n\nThis project also uses [React](https://facebook.github.io/react/) to handle the reactive, client-side components. I picked React because I like it, but it could be swapped out with Angular/Vue/Knockout/etc....\n\n## Features\n\n* Full game functionality:\n    * Authentication - Signup / Login\n    * Game Lobby with live updating list of available games\n    * Ability to create a game that will show up in other users' availiable games list\n    * Gameboard that enforces Obstruction rules and allows players to take turns and see the results in real-time\n    * Game log that tracks all moves and reports them live as they occur\n    * Players can chat in the game log\n* Lobby and Gameboard are made up of ReactJS components on the client-side\n* Examples of how to mix standard Django templating with ReactJS\n* Webpack integration to create separate bundles needed for different parts of the application\n* Django Rest Framework used to help serialize data needed by React as well as provides API endpoints for client-side data calls\n* Mixed use of DRF, standard Django context sent from the view, as well as communication through channels to demostrate multiple ways to interact with data and the Django backend\n\n## Requirements\n\n* Django \u003e= 1.9\n* [Django Channels](https://github.com/django/channels)\n* [Django Rest Framework](http://www.django-rest-framework.org/)\n* [Django Webpack Loader](https://github.com/owais/django-webpack-loader)\n* Node \u0026 Node Package Manager\n\n## Installation\n\n* Fork and clone this repository\n* Create a Python virtual environemnt\n* In that environment, run ```pip install -r requirements.txt``` inside your project\n* Install node modules with ```npm install```\n* Create the local database with ```python manage.py migrate```\n* Run webpack to build the components with ```npm run webpack```\n* Run Django development server on port 8080 - ```python manage.py runserver 8080```\n\n## License\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodyparker%2Fchannels-obstruction","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodyparker%2Fchannels-obstruction","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodyparker%2Fchannels-obstruction/lists"}