commit 6426fd8693221b8b5a1d98ef565f51989ce1c920 Author: denisvandyshev Date: Mon Dec 11 15:08:37 2023 +0300 added README.md diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000..5725acc Binary files /dev/null and b/db.sqlite3 differ diff --git a/djangoZoo/__init__.py b/djangoZoo/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/djangoZoo/__pycache__/__init__.cpython-39.pyc b/djangoZoo/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..df73792 Binary files /dev/null and b/djangoZoo/__pycache__/__init__.cpython-39.pyc differ diff --git a/djangoZoo/__pycache__/settings.cpython-39.pyc b/djangoZoo/__pycache__/settings.cpython-39.pyc new file mode 100644 index 0000000..74dfcad Binary files /dev/null and b/djangoZoo/__pycache__/settings.cpython-39.pyc differ diff --git a/djangoZoo/__pycache__/urls.cpython-39.pyc b/djangoZoo/__pycache__/urls.cpython-39.pyc new file mode 100644 index 0000000..7cb89f7 Binary files /dev/null and b/djangoZoo/__pycache__/urls.cpython-39.pyc differ diff --git a/djangoZoo/__pycache__/wsgi.cpython-39.pyc b/djangoZoo/__pycache__/wsgi.cpython-39.pyc new file mode 100644 index 0000000..cd24538 Binary files /dev/null and b/djangoZoo/__pycache__/wsgi.cpython-39.pyc differ diff --git a/djangoZoo/asgi.py b/djangoZoo/asgi.py new file mode 100644 index 0000000..5795e4f --- /dev/null +++ b/djangoZoo/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for djangoZoo 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.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoZoo.settings') + +application = get_asgi_application() diff --git a/djangoZoo/settings.py b/djangoZoo/settings.py new file mode 100644 index 0000000..2cc7546 --- /dev/null +++ b/djangoZoo/settings.py @@ -0,0 +1,131 @@ +""" +Django settings for djangoZoo project. + +Generated by 'django-admin startproject' using Django 4.2.7. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.2/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.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-a+^ud21hj(^q3p7vucr@)*y57%p4f=b)vbneh@aj^n-4u&__=)' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'test_browser', + +] + +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 = 'djangoZoo.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': ['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 = 'djangoZoo.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.2/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.2/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.2/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.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + + diff --git a/djangoZoo/urls.py b/djangoZoo/urls.py new file mode 100644 index 0000000..0de0296 --- /dev/null +++ b/djangoZoo/urls.py @@ -0,0 +1,35 @@ +""" +URL configuration for djangoZoo project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.2/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 test_browser.views import index_page, tickets_page, check_choice + + +app_name = "test_browser" + + + + +urlpatterns = [ + + path('admin/', admin.site.urls), + path('', index_page), + path('tickets.html', tickets_page), + path('check_choice/', check_choice, name = 'check_choice'), + + +] diff --git a/djangoZoo/wsgi.py b/djangoZoo/wsgi.py new file mode 100644 index 0000000..8643263 --- /dev/null +++ b/djangoZoo/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for djangoZoo 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.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoZoo.settings') + +application = get_wsgi_application() diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..f26e0e5 --- /dev/null +++ b/manage.py @@ -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', 'djangoZoo.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() diff --git a/static/bg.jpg b/static/bg.jpg new file mode 100644 index 0000000..c4cab99 Binary files /dev/null and b/static/bg.jpg differ diff --git a/static/bg3.jpeg b/static/bg3.jpeg new file mode 100644 index 0000000..3a69bf1 Binary files /dev/null and b/static/bg3.jpeg differ diff --git a/static/bg5.jpg b/static/bg5.jpg new file mode 100644 index 0000000..0f33b46 Binary files /dev/null and b/static/bg5.jpg differ diff --git a/static/bg6.jpg b/static/bg6.jpg new file mode 100644 index 0000000..897795c Binary files /dev/null and b/static/bg6.jpg differ diff --git a/static/cash.jpg b/static/cash.jpg new file mode 100644 index 0000000..25d77f6 Binary files /dev/null and b/static/cash.jpg differ diff --git a/static/g2.jpeg b/static/g2.jpeg new file mode 100644 index 0000000..73380e0 Binary files /dev/null and b/static/g2.jpeg differ diff --git a/static/js/custom.js b/static/js/custom.js new file mode 100644 index 0000000..f5d7fc4 --- /dev/null +++ b/static/js/custom.js @@ -0,0 +1,30 @@ +$(document).ready(function (){ + $('.plus').click(function (e){ + e.preventDefault(); + + var inc_value = $(this).closest('.product-data').find('.qty-input').val(); + var value = parseInt(inc_value,10); + value = isNaN(value) ? 0: value ; + if (value < 10){ + value++; + $(this).closest('.product-data').find('.qty-input').val(value); + + } + + }) + + + $('.minus').click(function (e){ + e.preventDefault(); + + var inc_value = $(this).closest('.product-data').find('.qty-input').val(); + var value = parseInt(inc_value,10); + value = isNaN(value) ? 0: value ; + if (value > 0){ + value--; + $(this).closest('.product-data').find('.qty-input').val(value); + + } + + }) +}) \ No newline at end of file diff --git a/static/js/jquery-3.7.1.min.js b/static/js/jquery-3.7.1.min.js new file mode 100644 index 0000000..798cc8b --- /dev/null +++ b/static/js/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0 + + + + Title + + + +
+
Ваш выбор:
{{tickets.0}} - {{quantity1}} +
{{tickets.1}} - {{quantity2}} +
{{tickets.2}} - {{quantity3}} +
Сумма к оплате - {{total_price}} P. +
+ +
Выберите способ оплаты: +
+ +
+
+ + + + \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..bc69ec2 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,153 @@ + +{% load static %} + + + + + + + Title + + + +

ЗООПАРК "СКАЗКА"

+ + + + + + + + + + \ No newline at end of file diff --git a/templates/tickets.html b/templates/tickets.html new file mode 100644 index 0000000..b380f1b --- /dev/null +++ b/templates/tickets.html @@ -0,0 +1,782 @@ + +{% load static %} + + + + + + + Tickets + + + + +

Пожалуйста, выберите тип билетов и укажите их количество

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Наименование Цена Количество
+
+
+
+ + + + + +
+ + +
* Сопровождающие льготных посетителей приобретают "Взрослый билет". Льготникам потребуется показать документы на право льготы охраннику
+ + + + + + + + + + + + \ No newline at end of file diff --git a/test_browser/__init__.py b/test_browser/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test_browser/__pycache__/__init__.cpython-39.pyc b/test_browser/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..c28cbf1 Binary files /dev/null and b/test_browser/__pycache__/__init__.cpython-39.pyc differ diff --git a/test_browser/__pycache__/admin.cpython-39.pyc b/test_browser/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000..31d12d5 Binary files /dev/null and b/test_browser/__pycache__/admin.cpython-39.pyc differ diff --git a/test_browser/__pycache__/apps.cpython-39.pyc b/test_browser/__pycache__/apps.cpython-39.pyc new file mode 100644 index 0000000..8f6fc8b Binary files /dev/null and b/test_browser/__pycache__/apps.cpython-39.pyc differ diff --git a/test_browser/__pycache__/models.cpython-39.pyc b/test_browser/__pycache__/models.cpython-39.pyc new file mode 100644 index 0000000..ad4935a Binary files /dev/null and b/test_browser/__pycache__/models.cpython-39.pyc differ diff --git a/test_browser/__pycache__/views.cpython-39.pyc b/test_browser/__pycache__/views.cpython-39.pyc new file mode 100644 index 0000000..1e3025b Binary files /dev/null and b/test_browser/__pycache__/views.cpython-39.pyc differ diff --git a/test_browser/admin.py b/test_browser/admin.py new file mode 100644 index 0000000..b532b5b --- /dev/null +++ b/test_browser/admin.py @@ -0,0 +1,8 @@ +from django.contrib import admin +from test_browser.models import Ticket, Order + +# Register your models here. +admin.site.register(Ticket) +admin.site.register(Order) + + diff --git a/test_browser/apps.py b/test_browser/apps.py new file mode 100644 index 0000000..1decb51 --- /dev/null +++ b/test_browser/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class TestBrowserConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'test_browser' diff --git a/test_browser/migrations/0001_initial.py b/test_browser/migrations/0001_initial.py new file mode 100644 index 0000000..035ed67 --- /dev/null +++ b/test_browser/migrations/0001_initial.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.7 on 2023-12-01 12:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Tickets', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=150)), + ('price', models.IntegerField(default=0)), + ], + ), + ] diff --git a/test_browser/migrations/0002_alter_tickets_price.py b/test_browser/migrations/0002_alter_tickets_price.py new file mode 100644 index 0000000..de62352 --- /dev/null +++ b/test_browser/migrations/0002_alter_tickets_price.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.7 on 2023-12-04 09:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='tickets', + name='price', + field=models.DecimalField(decimal_places=2, max_digits=8), + ), + ] diff --git a/test_browser/migrations/0003_rename_tickets_ticket.py b/test_browser/migrations/0003_rename_tickets_ticket.py new file mode 100644 index 0000000..8d49b23 --- /dev/null +++ b/test_browser/migrations/0003_rename_tickets_ticket.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.7 on 2023-12-05 13:45 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0002_alter_tickets_price'), + ] + + operations = [ + migrations.RenameModel( + old_name='Tickets', + new_name='Ticket', + ), + ] diff --git a/test_browser/migrations/0004_cartitem.py b/test_browser/migrations/0004_cartitem.py new file mode 100644 index 0000000..532fe68 --- /dev/null +++ b/test_browser/migrations/0004_cartitem.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.7 on 2023-12-05 13:51 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0003_rename_tickets_ticket'), + ] + + operations = [ + migrations.CreateModel( + name='CartItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('quantity', models.PositiveIntegerField(default=0)), + ('ticket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='test_browser.ticket')), + ], + ), + ] diff --git a/test_browser/migrations/0005_ticket_quantity_delete_cartitem.py b/test_browser/migrations/0005_ticket_quantity_delete_cartitem.py new file mode 100644 index 0000000..b3666b3 --- /dev/null +++ b/test_browser/migrations/0005_ticket_quantity_delete_cartitem.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.7 on 2023-12-06 09:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0004_cartitem'), + ] + + operations = [ + migrations.AddField( + model_name='ticket', + name='quantity', + field=models.PositiveIntegerField(default=0), + ), + migrations.DeleteModel( + name='CartItem', + ), + ] diff --git a/test_browser/migrations/0006_rename_quantity_ticket_quantity1_ticket_quantity2_and_more.py b/test_browser/migrations/0006_rename_quantity_ticket_quantity1_ticket_quantity2_and_more.py new file mode 100644 index 0000000..e06d211 --- /dev/null +++ b/test_browser/migrations/0006_rename_quantity_ticket_quantity1_ticket_quantity2_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2.7 on 2023-12-06 23:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0005_ticket_quantity_delete_cartitem'), + ] + + operations = [ + migrations.RenameField( + model_name='ticket', + old_name='quantity', + new_name='quantity1', + ), + migrations.AddField( + model_name='ticket', + name='quantity2', + field=models.PositiveIntegerField(default=0), + ), + migrations.AddField( + model_name='ticket', + name='quantity3', + field=models.PositiveIntegerField(default=0), + ), + ] diff --git a/test_browser/migrations/0007_order_rename_quantity1_ticket_quantity_and_more.py b/test_browser/migrations/0007_order_rename_quantity1_ticket_quantity_and_more.py new file mode 100644 index 0000000..97ef91d --- /dev/null +++ b/test_browser/migrations/0007_order_rename_quantity1_ticket_quantity_and_more.py @@ -0,0 +1,37 @@ +# Generated by Django 4.2.7 on 2023-12-07 11:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0006_rename_quantity_ticket_quantity1_ticket_quantity2_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Order', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=150)), + ('price', models.DecimalField(decimal_places=2, max_digits=8)), + ('quantity0', models.PositiveIntegerField(default=0)), + ('quantity1', models.PositiveIntegerField(default=0)), + ('quantity2', models.PositiveIntegerField(default=0)), + ], + ), + migrations.RenameField( + model_name='ticket', + old_name='quantity1', + new_name='quantity', + ), + migrations.RemoveField( + model_name='ticket', + name='quantity2', + ), + migrations.RemoveField( + model_name='ticket', + name='quantity3', + ), + ] diff --git a/test_browser/migrations/0008_remove_order_price.py b/test_browser/migrations/0008_remove_order_price.py new file mode 100644 index 0000000..6666d90 --- /dev/null +++ b/test_browser/migrations/0008_remove_order_price.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.7 on 2023-12-07 11:35 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0007_order_rename_quantity1_ticket_quantity_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='order', + name='price', + ), + ] diff --git a/test_browser/migrations/0009_delete_order.py b/test_browser/migrations/0009_delete_order.py new file mode 100644 index 0000000..75390c2 --- /dev/null +++ b/test_browser/migrations/0009_delete_order.py @@ -0,0 +1,16 @@ +# Generated by Django 4.2.7 on 2023-12-07 13:29 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0008_remove_order_price'), + ] + + operations = [ + migrations.DeleteModel( + name='Order', + ), + ] diff --git a/test_browser/migrations/0010_order.py b/test_browser/migrations/0010_order.py new file mode 100644 index 0000000..b9485ba --- /dev/null +++ b/test_browser/migrations/0010_order.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.7 on 2023-12-07 13:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0009_delete_order'), + ] + + operations = [ + migrations.CreateModel( + name='Order', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=150)), + ('quantity0', models.PositiveIntegerField(default=0)), + ('quantity1', models.PositiveIntegerField(default=0)), + ('quantity2', models.PositiveIntegerField(default=0)), + ], + ), + ] diff --git a/test_browser/migrations/0011_delete_order.py b/test_browser/migrations/0011_delete_order.py new file mode 100644 index 0000000..6ca536b --- /dev/null +++ b/test_browser/migrations/0011_delete_order.py @@ -0,0 +1,16 @@ +# Generated by Django 4.2.7 on 2023-12-07 13:32 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0010_order'), + ] + + operations = [ + migrations.DeleteModel( + name='Order', + ), + ] diff --git a/test_browser/migrations/0012_order.py b/test_browser/migrations/0012_order.py new file mode 100644 index 0000000..f812d40 --- /dev/null +++ b/test_browser/migrations/0012_order.py @@ -0,0 +1,24 @@ +# Generated by Django 4.2.7 on 2023-12-07 13:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0011_delete_order'), + ] + + operations = [ + migrations.CreateModel( + name='Order', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=150)), + ('quantity0', models.PositiveIntegerField(default=0)), + ('quantity1', models.PositiveIntegerField(default=0)), + ('quantity2', models.PositiveIntegerField(default=0)), + ('total_price', models.DecimalField(decimal_places=1, max_digits=10)), + ], + ), + ] diff --git a/test_browser/migrations/0013_alter_order_total_price.py b/test_browser/migrations/0013_alter_order_total_price.py new file mode 100644 index 0000000..96cee7e --- /dev/null +++ b/test_browser/migrations/0013_alter_order_total_price.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.7 on 2023-12-07 13:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0012_order'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='total_price', + field=models.DecimalField(blank=True, decimal_places=1, max_digits=10), + ), + ] diff --git a/test_browser/migrations/0014_alter_order_total_price.py b/test_browser/migrations/0014_alter_order_total_price.py new file mode 100644 index 0000000..1a05c62 --- /dev/null +++ b/test_browser/migrations/0014_alter_order_total_price.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.7 on 2023-12-08 06:27 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0013_alter_order_total_price'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='total_price', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='test_browser.ticket'), + ), + ] diff --git a/test_browser/migrations/0015_adultticket_freeticket_kidticket_and_more.py b/test_browser/migrations/0015_adultticket_freeticket_kidticket_and_more.py new file mode 100644 index 0000000..9f5db0c --- /dev/null +++ b/test_browser/migrations/0015_adultticket_freeticket_kidticket_and_more.py @@ -0,0 +1,45 @@ +# Generated by Django 4.2.7 on 2023-12-08 08:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0014_alter_order_total_price'), + ] + + operations = [ + migrations.CreateModel( + name='AdultTicket', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=150)), + ('price', models.DecimalField(decimal_places=2, max_digits=8)), + ], + ), + migrations.CreateModel( + name='FreeTicket', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=150)), + ('price', models.DecimalField(decimal_places=2, max_digits=8)), + ], + ), + migrations.CreateModel( + name='KidTicket', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=150)), + ('price', models.DecimalField(decimal_places=2, max_digits=8)), + ], + ), + migrations.AlterField( + model_name='order', + name='total_price', + field=models.DecimalField(decimal_places=1, max_digits=10), + ), + migrations.DeleteModel( + name='Ticket', + ), + ] diff --git a/test_browser/migrations/0016_ticket_delete_adultticket_delete_freeticket_and_more.py b/test_browser/migrations/0016_ticket_delete_adultticket_delete_freeticket_and_more.py new file mode 100644 index 0000000..9f6601e --- /dev/null +++ b/test_browser/migrations/0016_ticket_delete_adultticket_delete_freeticket_and_more.py @@ -0,0 +1,31 @@ +# Generated by Django 4.2.7 on 2023-12-08 08:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('test_browser', '0015_adultticket_freeticket_kidticket_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Ticket', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=150)), + ('price', models.DecimalField(decimal_places=2, max_digits=8)), + ('quantity', models.PositiveIntegerField(default=0)), + ], + ), + migrations.DeleteModel( + name='AdultTicket', + ), + migrations.DeleteModel( + name='FreeTicket', + ), + migrations.DeleteModel( + name='KidTicket', + ), + ] diff --git a/test_browser/migrations/__init__.py b/test_browser/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test_browser/migrations/__pycache__/0001_initial.cpython-39.pyc b/test_browser/migrations/__pycache__/0001_initial.cpython-39.pyc new file mode 100644 index 0000000..7a975cc Binary files /dev/null and b/test_browser/migrations/__pycache__/0001_initial.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0002_alter_tickets_price.cpython-39.pyc b/test_browser/migrations/__pycache__/0002_alter_tickets_price.cpython-39.pyc new file mode 100644 index 0000000..7b8d494 Binary files /dev/null and b/test_browser/migrations/__pycache__/0002_alter_tickets_price.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0003_rename_tickets_ticket.cpython-39.pyc b/test_browser/migrations/__pycache__/0003_rename_tickets_ticket.cpython-39.pyc new file mode 100644 index 0000000..4d30b72 Binary files /dev/null and b/test_browser/migrations/__pycache__/0003_rename_tickets_ticket.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0004_cartitem.cpython-39.pyc b/test_browser/migrations/__pycache__/0004_cartitem.cpython-39.pyc new file mode 100644 index 0000000..fa38c48 Binary files /dev/null and b/test_browser/migrations/__pycache__/0004_cartitem.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0005_ticket_quantity_delete_cartitem.cpython-39.pyc b/test_browser/migrations/__pycache__/0005_ticket_quantity_delete_cartitem.cpython-39.pyc new file mode 100644 index 0000000..069df33 Binary files /dev/null and b/test_browser/migrations/__pycache__/0005_ticket_quantity_delete_cartitem.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0006_rename_quantity_ticket_quantity1_ticket_quantity2_and_more.cpython-39.pyc b/test_browser/migrations/__pycache__/0006_rename_quantity_ticket_quantity1_ticket_quantity2_and_more.cpython-39.pyc new file mode 100644 index 0000000..5b77b81 Binary files /dev/null and b/test_browser/migrations/__pycache__/0006_rename_quantity_ticket_quantity1_ticket_quantity2_and_more.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0007_order_rename_quantity1_ticket_quantity_and_more.cpython-39.pyc b/test_browser/migrations/__pycache__/0007_order_rename_quantity1_ticket_quantity_and_more.cpython-39.pyc new file mode 100644 index 0000000..fcb90fc Binary files /dev/null and b/test_browser/migrations/__pycache__/0007_order_rename_quantity1_ticket_quantity_and_more.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0008_remove_order_price.cpython-39.pyc b/test_browser/migrations/__pycache__/0008_remove_order_price.cpython-39.pyc new file mode 100644 index 0000000..61753b4 Binary files /dev/null and b/test_browser/migrations/__pycache__/0008_remove_order_price.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0009_delete_order.cpython-39.pyc b/test_browser/migrations/__pycache__/0009_delete_order.cpython-39.pyc new file mode 100644 index 0000000..8e0b911 Binary files /dev/null and b/test_browser/migrations/__pycache__/0009_delete_order.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0010_order.cpython-39.pyc b/test_browser/migrations/__pycache__/0010_order.cpython-39.pyc new file mode 100644 index 0000000..087bfac Binary files /dev/null and b/test_browser/migrations/__pycache__/0010_order.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0011_delete_order.cpython-39.pyc b/test_browser/migrations/__pycache__/0011_delete_order.cpython-39.pyc new file mode 100644 index 0000000..eddf250 Binary files /dev/null and b/test_browser/migrations/__pycache__/0011_delete_order.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0012_order.cpython-39.pyc b/test_browser/migrations/__pycache__/0012_order.cpython-39.pyc new file mode 100644 index 0000000..40cfe8d Binary files /dev/null and b/test_browser/migrations/__pycache__/0012_order.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0013_alter_order_total_price.cpython-39.pyc b/test_browser/migrations/__pycache__/0013_alter_order_total_price.cpython-39.pyc new file mode 100644 index 0000000..53430e0 Binary files /dev/null and b/test_browser/migrations/__pycache__/0013_alter_order_total_price.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0014_alter_order_total_price.cpython-39.pyc b/test_browser/migrations/__pycache__/0014_alter_order_total_price.cpython-39.pyc new file mode 100644 index 0000000..de5ba05 Binary files /dev/null and b/test_browser/migrations/__pycache__/0014_alter_order_total_price.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0015_adultticket_freeticket_kidticket_and_more.cpython-39.pyc b/test_browser/migrations/__pycache__/0015_adultticket_freeticket_kidticket_and_more.cpython-39.pyc new file mode 100644 index 0000000..b206ebb Binary files /dev/null and b/test_browser/migrations/__pycache__/0015_adultticket_freeticket_kidticket_and_more.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/0016_ticket_delete_adultticket_delete_freeticket_and_more.cpython-39.pyc b/test_browser/migrations/__pycache__/0016_ticket_delete_adultticket_delete_freeticket_and_more.cpython-39.pyc new file mode 100644 index 0000000..999c2f0 Binary files /dev/null and b/test_browser/migrations/__pycache__/0016_ticket_delete_adultticket_delete_freeticket_and_more.cpython-39.pyc differ diff --git a/test_browser/migrations/__pycache__/__init__.cpython-39.pyc b/test_browser/migrations/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..3069654 Binary files /dev/null and b/test_browser/migrations/__pycache__/__init__.cpython-39.pyc differ diff --git a/test_browser/models.py b/test_browser/models.py new file mode 100644 index 0000000..7f14201 --- /dev/null +++ b/test_browser/models.py @@ -0,0 +1,29 @@ +from django.db import models +from django.contrib.auth.models import User + +from djangoZoo import settings + + +# Create your models here. +class Ticket(models.Model): + name = models.CharField(max_length=150) + price = models.DecimalField(max_digits=8, decimal_places=2) + quantity = models.PositiveIntegerField(default=0) + + def __str__(self): + return self.name + +class Order(models.Model): + name = models.CharField(max_length=150) + quantity0 = models.PositiveIntegerField(default=0) + quantity1 = models.PositiveIntegerField(default=0) + quantity2 = models.PositiveIntegerField(default=0) + total_price = models.DecimalField(max_digits=10, decimal_places=1) + + + + def __str__(self): + return self.name + + + diff --git a/test_browser/tests.py b/test_browser/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/test_browser/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/test_browser/views.py b/test_browser/views.py new file mode 100644 index 0000000..b185222 --- /dev/null +++ b/test_browser/views.py @@ -0,0 +1,50 @@ +from django.shortcuts import render, redirect + +from djangoZoo import settings +from test_browser.models import Ticket, Order + + +# Create your views here. + +def index_page(request): + return render(request, 'index.html') + +def tickets_page(request): + + all_Ticket = Ticket.objects.all() + + return render(request, 'tickets.html', context={'tickets': all_Ticket}) + + +def check_choice(request): + + all_Ticket = Ticket.objects.all() + quantity0 = request.GET['ticket1'] + quantity1 = request.GET['ticket2'] + quantity2 = request.GET['ticket3'] + total_price = (all_Ticket[0].price * int(quantity0) + all_Ticket[1].price * int(quantity1)) + element = Order(name = 'Order #', quantity0 = quantity0, quantity1 = quantity1, quantity2 = quantity2, + total_price = total_price) + element.save() + return render(request, 'check_choice.html', {'quantity1' : quantity0, + 'quantity2' : quantity1, + 'quantity3' : quantity2, + 'tickets': all_Ticket, + 'total_price' : total_price}) + + + + + + + + + + + + + + + + +