Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added pydojo/backend/__init__.py
Empty file.
16 changes: 16 additions & 0 deletions pydojo/backend/asgi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""
ASGI config for backend project.

It exposes the ASGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/
"""

import os

from django.core.asgi import get_asgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')

application = get_asgi_application()
125 changes: 125 additions & 0 deletions pydojo/backend/settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
"""
Django settings for backend project.
Generated by 'django-admin startproject' using Django 4.0.5.
For more information on this file, see
https://docs.djangoproject.com/en/4.0/topics/settings/

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When I go to this link, it says "This document is for an insecure version of Django that is no longer supported. Please upgrade to a newer release!". Maybe we should use v4.2?

For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.0/ref/settings/
"""

from pathlib import Path
import os

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-zjnqabq%c2lpq$jgg12z8q6foq^q2i94cr02q76&(2stpwn#a8'

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should not commit the secret key to a public repo. Let's find out where to store it instead


# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly, we should set this to False in the repo, and have a way to make it True when we test the website locally.


ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'backend.urls'

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR/'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

WSGI_APPLICATION = 'backend.wsgi.application'


# Database
# https://docs.djangoproject.com/en/4.0/ref/settings/#databases

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}


# Password validation
# https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]


# Internationalization
# https://docs.djangoproject.com/en/4.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.0/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

# Default primary key field type
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
25 changes: 25 additions & 0 deletions pydojo/backend/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
"""backend URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/4.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index_page, name="index"),
path('signup', views.signup_page, name="signup"),
path('homepage', views.index_page, name="homepage")
]
45 changes: 45 additions & 0 deletions pydojo/backend/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from django.shortcuts import render,HttpResponse,HttpResponseRedirect
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.contrib.auth.models import User

# Create your views here.

def index_page(request):
return render(request,'index.html')

def login_page(request):
if request.method =="POST":
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return HttpResponseRedirect("homepage")
else:
messages.warning(request, "Invalid credintials please try again!!")
return HttpResponseRedirect("/")
else:
return HttpResponse(render(request,'login_page.html'))

def signup_page(request):
if request.method == "POST":
username = request.POST['username']
# email = request.POST['email']
pswd1 = request.POST['pswd1']
pswd2 = request.POST['pswd2']
if pswd1 == pswd2:
if User.objects.all().filter(username=username).exists():
messages.warning(request,'Username Already Exists')
return HttpResponseRedirect('signup')
else:
new_user = User.objects.create_user(username, password=pswd1)
new_user.save();
messages.success(request,"Successfully create an account please, login now")
return HttpResponseRedirect('signup')
else:
messages.warning(request,'password doesnt match')
return HttpResponseRedirect('signup')

else:
return HttpResponse(render(request, 'signup.html'))
16 changes: 16 additions & 0 deletions pydojo/backend/wsgi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""
WSGI config for backend project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')

application = get_wsgi_application()
22 changes: 22 additions & 0 deletions pydojo/manage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys


def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)


if __name__ == '__main__':
main()
File renamed without changes.
File renamed without changes.
29 changes: 18 additions & 11 deletions pydojo/dist/index.html → pydojo/templates/index.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
<!-- @format -->

{% load static %}
<html>

<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/9000.0.1/themes/prism.min.css"
integrity="sha512-/mZ1FHPkg6EKcxo0fKXF51ak6Cr2ocgDi5ytaTBjsQZIH/RNs6GF6+oId/vPe3eJB836T36nXwVh/WBl/cWT4w=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
Expand Down Expand Up @@ -34,8 +38,9 @@

.editor {
border-radius: 6px;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
font-family: 'Source Code Pro', monospace;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
font-family: "Source Code Pro", monospace;
font-size: 14px;
font-weight: 400;
height: 340px;
Expand All @@ -52,18 +57,19 @@
<h2>PyDojo</h2>
<h3>Problem: Sum of 1 to n</h3>
<p>
Write a function <code>sum_to(n)</code> that adds up all the numbers from <code>1</code> up to <code>n</code>.
If you call <code>sum_to(10)</code>, for example, it should return <code>55</code>.
Write a function <code>sum_to(n)</code> that adds up all the numbers from
<code>1</code> up to <code>n</code>. If you call <code>sum_to(10)</code>,
for example, it should return <code>55</code>.
</p>
<form>
<div class="editor language-python"> </div>
<textarea id="defaultcode" style="display: none;">
<div class="editor language-python"></div>
<textarea id="defaultcode" style="display: none">
def sum_to(n):
# Your code goes here

print(sum_to(10)) # Expected: 55
</textarea><br />
<textarea id="unittests" style="display: none;">
<textarea id="unittests" style="display: none">
tests = [(n, sum(range(n+1))) for n in [0,10,15,100,98765]]
for n, ans in tests:
assert ans == sum_to(n), f"sum_to({n}) should be {ans} but was {sum_to(n)}"
Expand All @@ -74,9 +80,10 @@ <h3>Problem: Sum of 1 to n</h3>
</form>
<pre id="output"></pre>

<script src="codejar.min.js" type="text/javascript"></script>
<script src="linenumbers.min.js" type="text/javascript"></script>
<script src="index.js" type="text/javascript"></script>
<script src=" {% static 'js/codejar.min.js' %}" type="text/javascript"></script>
<script src="{% static 'js/codejar.min.js' %}" type="text/javascript"></script>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This JS file is being imported twice.

<script src=" {% static 'js/linenumbers.min.js' %}" type="text/javascript"></script>
<script type="text/javascript" src="{% static 'js/script.js' %}"></script>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This expects script.js to live in static/js/ but this PR moves it to templates/

</body>

</html>
File renamed without changes.