diff --git a/src/pages/views.py b/src/pages/views.py index 4faab10..03ee21c 100644 --- a/src/pages/views.py +++ b/src/pages/views.py @@ -1,6 +1,28 @@ +# views.py is the mini app that handles all of your webpages and it's rendering. + from django.http import HttpResponse from django.shortcuts import render +""" +This site provide a best explantion and example of *args and **kwargs: https://www.geeksforgeeks.org/args-kwargs-python/ check it out for the actual examples. + +*args + The special syntax *args in function definitions in python is used to pass a variable number of arguments to a function. It is used to pass a non-keyworded, variable-length argument list. + The syntax is to use the symbol * to take in a variable number of arguments; by convention, it is often used with the word args. + + What *args allows you to do is take in more arguments than the number of formal arguments that you previously defined. With *args, any number of extra arguments can be tacked on to your current formal parameters (including zero extra arguments). + + For example : we want to make a multiply function that takes any number of arguments and able to multiply them all together. It can be done using *args. + + Using the *, the variable that we associate with the * becomes an iterable meaning you can do things like iterate over it, run some higher order functions such as map and filter, etc. + +**kwargs + The special syntax **kwargs in function definitions in python is used to pass a keyworded, variable-length argument list. We use the name kwargs with the double star. The reason is because the double star allows us to pass through keyword arguments (and any number of them). + A keyword argument is where you provide a name to the variable as you pass it into the function. + + One can think of the kwargs as being a dictionary that maps each keyword to the value that we pass alongside it. That is why when we iterate over the kwargs there doesn’t seem to be any order in which they were printed out. +""" + # Create your views here. def home_view(request, *args, **kwargs): # *args, **kwargs print(args, kwargs) diff --git a/src/products/admin.py b/src/products/admin.py index 9c3c54f..1122d9b 100644 --- a/src/products/admin.py +++ b/src/products/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Product +from .models import Product # In'.model' the '.' is known as a relative import. You are importing a 'model.py' from the same directory as this 'admin.py' which in this case is 'products/'. You are import the Product class you created in 'product/models.py'. -admin.site.register(Product) \ No newline at end of file +admin.site.register(Product) # You are registering your DB Model Product to Django's Admin site which is http://127.0.0.1:8000/admin. You can now add/delete/modify you Product records from there in http://127.0.0.1:8000/admin/products. Be sure in 'trydjango/settings.py' you include 'products/' in INSTALLED_APPS section. \ No newline at end of file diff --git a/src/products/models.py b/src/products/models.py index 3f66c91..450caa4 100644 --- a/src/products/models.py +++ b/src/products/models.py @@ -1,12 +1,75 @@ from django.db import models from django.urls import reverse # Create your models here. -class Product(models.Model): +# The 'products/' app job as an app will be to store products infomation in the backend of this site. +# The code below is the DB Model (or blueprint) for the DataBase. +""" +From djangoprojects.com: + +A model is the single, definitive source of information about your data. It contains the essential fields and behaviors of the data you’re storing. Generally, each model maps to a single database table. + +The basics: + Each model is a Python class that subclasses django.db.models.Model. + Each attribute of the model represents a database field. + With all of this, Django gives you an automatically-generated database-access API + +After you typed up your model you will want to go 'admin.py' to register your model. For this project goto 'products/admin.py' +""" +class Product(models.Model): # 'models.Model' Means from the models module import the class Models (you can also import functions from modules but that's not the case here). We are using inheritence here. Product is inheriting the class properties and methods from models.Model + # To know the fields and the required param to use for your project please refer to: https://docs.djangoproject.com/en/2.2/ref/models/fields/ + # Make it a habit to read the documentation. Use google or StackOverflow if the documentation is to hard to read. title = models.CharField(max_length=120) # max_length = required description = models.TextField(blank=True, null=True) - price = models.DecimalField(decimal_places=2, max_digits=10000) - summary = models.TextField(blank=False, null=False) + price = models.DecimalField(decimal_places=2, max_digits=10000) # 'decimal_places=2' e.g. .12,.56, etc. not like .2365 or anything passed two decimal places. + summary = models.TextField(blank=False, null=False) featured = models.BooleanField(default=False) # null=True, default=True + """ + If you ever remake an entire DB model from scratch you may want + to consider deleting the DB (not always, avoid that if you can). + For this project you do that by deleting 'db.sqlite3' + then 'python manage.py makemigrations', + 'python manage.py migrate' (doing these two commands will create + a new 'db.sqlite3'), and create a + superuser again using 'python manage.py createsuperuser'. + + Remember you must makemigration and migrate anytime you mess with the model or DB. + + Check out Try DJANGO Tutorial - 11 - Change a Model. + Refer to: https://www.youtube.com/watch?v=8tVoq291aZ8&list=PLEsfXFp6DpzTD1BD1aWNxS2Ep06vIkaeW&index=11 + + This is changing DB model without deleting it. Check out the './migrations/' after. No comment was added there. + """ + + """ + On 'Try DJANGO Tutorial - 9 - Create Product Objects in the Python Shell' + the model before the current one above was simplistic and not good construction of + DataBase Normization (this was done on purpose for simplisty sake). What will be + written is how to do the commands using above's current fields. + + Firstly, make sure you are in the same directory as 'manage.py'. + Then type 'python manage.py shell'. You need to 'from products.models import Product' to + manipuate the DB from the python shell using manage.py. + + Using 'Product.objects.all()' will show you all DB QuerySet stored. Remember you can + still check your QuerySet and manipuate it using the Web GUI on + http://127.0.0.1:8000/admin/products/ + + To create a record type like this: "Product.objects.create(title='Some title', + price=123.12, summary='Some summary')". Noticed 'description = models.TextField + (blank=True, null=True)', 'summary = models.TextField(blank=False, null=False)', + and 'featured = models.BooleanField(default=False)'? + + In the description with the field param set to 'blank=True' and 'null=True' you do not + have to set a text value (blank=True) and can be set to nothing or not using '' + (null=True). In summary you must have some string value init or Python will not enter + your code into the DB and the DB will also not accept it. + + 'Featured' is a field that was added later on after the Try DJANGO Tutorial - 9 video. + To fix the problem python and the DB had since there was no '(blank=True, null=True)' + the default value of 'Featured was set to False. You can add the optional params + should you wish. Like so: "Product.objects.create(title='Some title', price=123.12, + summary='Some summary', Featured=True, description='Some description')". + """ def get_absolute_url(self): return reverse("products:product-detail", kwargs={"id": self.id}) #f"/products/{self.id}/" \ No newline at end of file diff --git a/src/trydjango/settings.py b/src/trydjango/settings.py index a7c6ef4..ff71d2a 100644 --- a/src/trydjango/settings.py +++ b/src/trydjango/settings.py @@ -8,6 +8,17 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/2.0/ref/settings/ + +SuperUser: +Admin +p@ssw0rd +""" + +""" +Use 'python manage.py migrate' to sync settings onto the apps of this project. + +To create apps you should use 'python manage.py startapp '. +Each app can do everything by itself but design-wise you create multiple apps that each do one thing very well. The apps in this case are the folders: blog, courses, pages, and products. """ import os @@ -30,7 +41,7 @@ # Application definition -INSTALLED_APPS = [ +INSTALLED_APPS = [ # More like Components that are little pieces of a greater project. 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -40,11 +51,11 @@ # third party - # own + # include your own apps here 'blog', 'courses', - 'pages', - 'products', + 'pages', # This is to set an app that will deal with the webpages. + 'products', # Refer to 'products/admin.py'. Always 'python manage.py makemigration' since you are now messing with the DB. To implement you DB you have type 'python manage.py migrate' after. Go back to 'products/models.py' to learn about adding records with python shell. ] MIDDLEWARE = [ @@ -57,7 +68,7 @@ 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] -ROOT_URLCONF = 'trydjango.urls' +ROOT_URLCONF = 'trydjango.urls' # How Django knows to route any given URLs. TEMPLATES = [ { @@ -75,7 +86,7 @@ }, ] -WSGI_APPLICATION = 'trydjango.wsgi.application' +WSGI_APPLICATION = 'trydjango.wsgi.application' # This is how your server works. It goes though this setting. Some cases you change it and in others you leave it alone. # Database @@ -83,8 +94,9 @@ DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + 'ENGINE': 'django.db.backends.sqlite3', # Change where .sqlite3 is to change different Database Management System. + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # Must also place location of new DBMS. Check documentation. + # Fun fact--> 'NAME': os.path.join(BASE_DIR, 'db2.sqlite3'), --> will create another DB called db2.sqlite3 next to db.sqlite3. You have to type 'python manage.py migrate' to implement though. You should do that every time you change the settings of 'settings.py' or DB Models which will be discussed later. } } @@ -92,7 +104,7 @@ # Password validation # https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators -AUTH_PASSWORD_VALIDATORS = [ +AUTH_PASSWORD_VALIDATORS = [ # Validates passwords to current standard. { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, @@ -126,3 +138,4 @@ # https://docs.djangoproject.com/en/2.0/howto/static-files/ STATIC_URL = '/static/' + diff --git a/trydjango.sublime-project b/trydjango.sublime-project deleted file mode 100644 index 24db303..0000000 --- a/trydjango.sublime-project +++ /dev/null @@ -1,8 +0,0 @@ -{ - "folders": - [ - { - "path": "." - } - ] -} diff --git a/trydjango.sublime-workspace b/trydjango.sublime-workspace deleted file mode 100644 index 8106fdb..0000000 --- a/trydjango.sublime-workspace +++ /dev/null @@ -1,1132 +0,0 @@ -{ - "auto_complete": - { - "selected_items": - [ - [ - "form", - "form_class" - ], - [ - "Pro", - "Product" - ], - [ - "templa", - "template" - ], - [ - "home", - "home_view" - ], - [ - "posts", - "Posts" - ], - [ - "get_or", - "get_or_new" - ], - [ - "other", - "other_username" - ], - [ - "get", - "get_thread" - ], - [ - "msg", - "msgData" - ], - [ - "mes", - "message_data" - ], - [ - "room", - "room_group_name" - ], - [ - "chan", - "channel_layer" - ], - [ - "roo", - "room_group_name" - ], - [ - "tex", - "text_data" - ], - [ - "message", - "messageText" - ], - [ - "BA", - "BASE_DIR" - ], - [ - "POst", - "PostManager" - ], - [ - "get_", - "get_recent_status" - ], - [ - "Stat", - "Status" - ], - [ - "ser", - "serializer_class" - ], - [ - "file", - "file_data" - ], - [ - "us", - "username" - ], - [ - "valid", - "validated_data" - ], - [ - "pass", - "password2" - ], - [ - "User", - "UserRegisterSerializer" - ], - [ - "se", - "serializers" - ], - [ - "pas", - "password2" - ], - [ - "aut", - "authenticated" - ], - [ - "res", - "rest_framework" - ], - [ - "t", - "timezone" - ], - [ - "jw", - "jwt_response_payload_handler" - ], - [ - "json", - "json_str" - ], - [ - "b", - "b64encode" - ], - [ - "per", - "permissions" - ], - [ - "au", - "authentication_classes" - ], - [ - "cont", - "Content-Type" - ], - [ - "pos", - "post_data" - ], - [ - "post", - "post_method" - ], - [ - "content", - "content-type" - ], - [ - "po", - "post_data" - ], - [ - "img", - "image_path" - ], - [ - "do", - "do_img" - ], - [ - "bod", - "body_" - ], - [ - "query", - "query_get" - ], - [ - "quer", - "query_body" - ], - [ - "gene", - "generics" - ], - [ - "sa", - "serializer" - ], - [ - "s", - "serializers" - ], - [ - "clea", - "cleaned_data" - ], - [ - "St", - "StatusForm" - ], - [ - "staut", - "StatusForm" - ], - [ - "passed", - "passed_id" - ], - [ - "de", - "deleted_" - ], - [ - "sav", - "saved_data" - ], - [ - "is", - "is_json" - ], - [ - "err", - "error_data" - ], - [ - "Updat", - "UpdateModel" - ], - [ - "Up", - "UpdateModel" - ], - [ - "Mo", - "UpdateModelForm" - ], - [ - "crf", - "csrf_exempt" - ], - [ - "new", - "new_data" - ], - [ - "st", - "status_code" - ], - [ - "lis", - "list_values" - ], - [ - "js", - "json" - ], - [ - "render", - "render_to_json_response" - ], - [ - "con", - "context" - ], - [ - "re", - "render" - ], - [ - "Char", - "ChargeManager" - ], - [ - "stri", - "stripe_charge" - ], - [ - "strip", - "stripe_charge" - ], - [ - "card", - "card_obj" - ], - [ - "or", - "other_ids" - ], - [ - "sess", - "session_key" - ], - [ - "Login", - "LoginForm" - ], - [ - "full", - "full_name" - ], - [ - "is_", - "is_staff" - ], - [ - "user", - "user_obj" - ], - [ - "auto_", - "auto_now_add" - ], - [ - "add", - "address_line_2" - ], - [ - "line", - "line1" - ], - [ - "ship", - "shipping_address" - ], - [ - "bil", - "billing_address_id" - ], - [ - "Bil", - "BillingProfile" - ], - [ - "Bill", - "BillingProfileManager" - ], - [ - "obj", - "order_obj" - ], - [ - "order", - "order_obj" - ], - [ - "billing", - "billing_profile" - ], - [ - "car", - "cart_removal_qs" - ], - [ - "gues", - "guest_email_id" - ], - [ - "cl", - "cleaned_data" - ], - [ - "bill", - "billing_profile" - ], - [ - "next", - "next_post" - ], - [ - "nu", - "num1" - ], - [ - "cart", - "cart_obj" - ], - [ - "ran", - "random_string_generator" - ], - [ - "pr", - "product_id" - ], - [ - "Pr", - "ProductDetailSlugView" - ], - [ - "prd", - "product_id" - ], - [ - "Car", - "CartManager" - ], - [ - "tag", - "tag_set" - ], - [ - "drop", - "dropdown-menu" - ], - [ - "nav", - "navbar" - ], - [ - "fea", - "featured" - ], - [ - "conta", - "contact_form" - ], - [ - "mar", - "margin-bottom" - ], - [ - "en", - "environ" - ], - [ - "image", - "image_path" - ], - [ - "in", - "instanceof\tkeyword" - ], - [ - "Vid", - "VideoManager" - ], - [ - "Vide", - "VideoQuerySet" - ], - [ - "q", - "query" - ], - [ - "u", - "unique_slug_generator" - ], - [ - "col-", - "col-sm-12" - ], - [ - "h", - "homeImageList\tproperty" - ], - [ - "r", - "routeSub\tproperty" - ], - [ - "Av", - "ActivatedRoute\talias" - ], - [ - "p", - "push\tmethod" - ], - [ - "max", - "max-height" - ], - [ - "margin-", - "margin-bottom" - ], - [ - "min", - "min-height" - ], - [ - "by", - "bypassSecurityTrustResourceUrl\tmethod" - ], - [ - "Pip", - "PipeTransform\talias" - ], - [ - "imp", - "implements\tkeyword" - ], - [ - "cons", - "console\tvar" - ], - [ - "rou", - "RouterModule\talias" - ], - [ - "Rou", - "RouterModule\talias" - ], - [ - "fu", - "function\tkeyword" - ], - [ - "bas", - "basil3\tlet" - ] - ] - }, - "buffers": - [ - { - "file": "src/courses/views.py", - "settings": - { - "buffer_size": 1048, - "encoding": "UTF-8", - "line_ending": "Unix" - } - }, - { - "file": "src/courses/forms.py", - "settings": - { - "buffer_size": 182, - "encoding": "UTF-8", - "line_ending": "Unix" - } - }, - { - "file": "src/courses/templates/courses/course_create.html", - "settings": - { - "buffer_size": 184, - "encoding": "UTF-8", - "line_ending": "Unix" - } - }, - { - "file": "src/courses/models.py", - "settings": - { - "buffer_size": 129, - "encoding": "UTF-8", - "line_ending": "Unix" - } - }, - { - "file": "src/courses/urls.py", - "settings": - { - "buffer_size": 520, - "encoding": "UTF-8", - "line_ending": "Unix" - } - }, - { - "file": "src/courses/templates/courses/course_list.html", - "settings": - { - "buffer_size": 166, - "encoding": "UTF-8", - "line_ending": "Unix" - } - }, - { - "file": "src/products/templates/products/product_list.html", - "settings": - { - "buffer_size": 212, - "line_ending": "Unix" - } - } - ], - "build_system": "", - "build_system_choices": - [ - ], - "build_varint": "", - "command_palette": - { - "height": 87.0, - "last_filter": "", - "selected_items": - [ - [ - "packag", - "Package Control: Install Package" - ], - [ - "install", - "Package Control: Install Package" - ], - [ - "set", - "Set Syntax: TypeScriptReact" - ], - [ - "mark", - "Markdown Preview: Preview in Browser" - ], - [ - "instal", - "Package Control: Install Package" - ], - [ - "ins", - "Package Control: Install Package" - ], - [ - "pack", - "Package Control: Install Package" - ], - [ - "mar", - "Markdown Preview: Preview in Browser" - ], - [ - "markd", - "Markdown Preview: Preview in Browser" - ], - [ - "markdown", - "Markdown Preview: Preview in Browser" - ], - [ - "", - "Convert Case: Lower Case" - ], - [ - "package", - "Package Control: List Packages" - ] - ], - "width": 485.0 - }, - "console": - { - "height": 156.0, - "history": - [ - ] - }, - "distraction_free": - { - "menu_visible": true, - "show_minimap": false, - "show_open_files": false, - "show_tabs": false, - "side_bar_visible": false, - "status_bar_visible": false - }, - "expanded_folders": - [ - "/Users/cfe/Dev/trydjango", - "/Users/cfe/Dev/trydjango/lib", - "/Users/cfe/Dev/trydjango/src", - "/Users/cfe/Dev/trydjango/src/courses", - "/Users/cfe/Dev/trydjango/src/courses/templates", - "/Users/cfe/Dev/trydjango/src/courses/templates/courses", - "/Users/cfe/Dev/trydjango/src/products", - "/Users/cfe/Dev/trydjango/src/products/templates", - "/Users/cfe/Dev/trydjango/src/products/templates/products", - "/Users/cfe/Dev/trydjango/src/trydjango" - ], - "file_history": - [ - "/Users/cfe/Dev/trydjango/src/courses/form.py", - "/Users/cfe/Dev/trydjango/src/courses/templates/courses/course_detail.html", - "/Users/cfe/Dev/trydjango/src/courses/urls.py", - "/Users/cfe/Dev/trydjango/src/trydjango/settings.py", - "/Users/cfe/Dev/trydjango/src/trydjango/urls.py", - "/Users/cfe/Dev/trydjango/src/blog/views.py", - "/Users/cfe/Dev/trydjango/src/blog/models.py", - "/Users/cfe/Dev/trydjango/src/products/views.py", - "/Users/cfe/Dev/trydjango/src/blog/templates/articles/article_delete.html", - "/Users/cfe/Dev/trydjango/src/blog/urls.py", - "/Users/cfe/Dev/trydjango/src/blog/templates/articles/article_list.html", - "/Users/cfe/Dev/trydjango/src/blog/templates/articles/article_create.html", - "/Users/cfe/Dev/trydjango/src/blog/forms.py", - "/Users/cfe/Dev/trydjango/src/blog/templates/articles/article_detail.html", - "/Users/cfe/Dev/trydjango/src/products/models.py", - "/Users/cfe/Dev/trydjango/src/blog/admin.py", - "/Users/cfe/Dev/trydjango/src/products/urls.py", - "/Users/cfe/Dev/trydjango/src/products/templates/products/product_create.html", - "/Users/cfe/Dev/trydjango/src/products/forms.py", - "/Users/cfe/Library/Application Support/Sublime Text 3/Packages/User/MyTheme.sublime-theme", - "/Users/cfe/Dev/trydjango/src/products/templates/products/product_detail.html", - "/Users/cfe/Dev/trydjango/src/templates/contact.html", - "/Users/cfe/Dev/trydjango/src/templates/navbar.html", - "/Users/cfe/Dev/trydjango/src/pages/views.py", - "/Users/cfe/Dev/trydjango/src/templates/form.html", - "/Users/cfe/Dev/trydjango/src/templates/product/detail.html", - "/Users/cfe/Dev/trydjango/src/templates/products/product_detail.html", - "/Users/cfe/Dev/trydjango/src/templates/home.html", - "/Users/cfe/Dev/trydjango/src/templates/about.html", - "/Users/cfe/Dev/trydjango/src/templates/base.html", - "/Users/cfe/Dev/trydjango/src/products/admin.py", - "/Users/cfe/Dev/trydjango/.gitignore", - "/Users/cfe/Dev/trydjango/trydjango.sublime-project", - "/Volumes/CFE_2018/CFE Projects/Current/Try Reactjs/Artwork/YouTube/description.txt", - "/Volumes/CFE_2018/CFE Projects/Current/Try Reactjs/Artwork/YouTube/tags.txt", - "/Users/cfe/Dev/try-reactjs/README.md", - "/Users/cfe/Dev/try-reactjs/src/App.js", - "/Users/cfe/Dev/try-reactjs/package.json", - "/Users/cfe/Dev/channels/src/chat/consumers.py", - "/Users/cfe/Dev/channels/src/cfehome/asgi.py", - "/Users/cfe/Dev/channels/src/cfehome/asgi_production.py", - "/Users/cfe/Dev/channels/src/cfehome/settings.py", - "/Users/cfe/Dev/channels/src/cfehome/production.py", - "/Users/cfe/Dev/channels/src/cfehome/settings/__init__.py", - "/Users/cfe/Dev/channels/src/.gitignore", - "/Users/cfe/Dev/channels/src/cfehome/settings/base.py", - "/Users/cfe/Dev/channels/src/cfehome/settings/local.py", - "/Users/cfe/Dev/channels/src/cfehome/settings/production.py", - "/Users/cfe/Dev/channels/src/templates/js.html", - "/Users/cfe/Dev/channels/src/chat/templates/chat/thread.html", - "/Users/cfe/Dev/channels/readme.md", - "/Users/cfe/Dev/channels/src/cfehome/wsgi.py", - "/Users/cfe/Dev/channels/src/manage.py", - "/Users/cfe/Dev/channels/src/Procfile", - "/Volumes/CFE_2018/CFE Projects/Current/Chat x Channels/Blog/Django-Channels-To-Production.md", - "/Users/cfe/Dev/channels/src/cfehome/routing.py", - "/Users/cfe/Dev/channels/src/templates/base.html", - "/Users/cfe/Dev/channels/src/chat/utils.py", - "/Users/cfe/Dev/channels/src/chat/models.py", - "/Users/cfe/Dev/channels/src/chat/views.py", - "/Users/cfe/Dev/channels/src/cfehome/asgi2.py", - "/Users/cfe/Dev/channels/src/chat/js-tests/console.tests.js", - "/Users/cfe/Dev/channels/src/chat/forms.py", - "/Users/cfe/Dev/channels/src/templates/home.html", - "/Users/cfe/Dev/channels/.gitignore", - "/Users/cfe/Dev/channels/parse_git_log.py", - "/Users/cfe/Dev/channels/src/templates/css.html", - "/Users/cfe/Dev/channels/src/chat/templates/chat/inbox.html", - "/Users/cfe/Dev/channels/src/chat/urls.py", - "/Users/cfe/Dev/channels/src/cfehome/urls.py", - "/Users/cfe/Dev/channels/src/chat/admin.py", - "/Users/cfe/Dev/cfehome/src/search/views.py", - "/Users/cfe/Dev/cfehome/src/courses/models.py", - "/Users/cfe/Dev/cfehome/src/cfehome/urls.py", - "/Users/cfe/Dev/cfehome/src/profiles/admin.py", - "/Users/cfe/Dev/cfehome/src/blog/models.py", - "/Users/cfe/Dev/cfehome/src/blog/admin.py", - "/Users/cfe/Dev/cfehome/src/templates/base.html", - "/Users/cfe/Dev/cfehome/src/profiles/models.py", - "/Users/cfe/Dev/cfehome/src/cfehome/settings/base.py", - "/Users/cfe/Dev/cfehome/src/cfehome/settings/local.py", - "/Users/cfe/Dev/cfehome/src/cfehome/settings/production.py", - "/Users/cfe/Dev/cfehome/src/courses/admin.py", - "/Users/cfe/Dev/cfehome/src/search/templates/search/view.html", - "/Users/cfe/Dropbox/CFE Projects/tests/client/cfe-rest-client/package.json", - "/Users/cfe/Dropbox/CFE Projects/tests/src/cfeapi/settings.py", - "/Users/cfe/Dropbox/CFE Projects/tests/client/cfe-rest-client/src/app/status-create/status-create.component.html", - "/Users/cfe/Dropbox/CFE Projects/tests/client/cfe-rest-client/src/app/status-create/status-create.component.ts", - "/Users/cfe/Dropbox/CFE Projects/tests/client/cfe-rest-client/src/app/app-routing.module.ts", - "/Users/cfe/Dropbox/CFE Projects/tests/client/cfe-rest-client/src/app/status-detail/status-detail.component.ts", - "/Volumes/CFE/CFE Projects/Current/Rest API/Sections/3 - Django Rest Framework API/Tests/test_rest_api.py", - "/Users/cfe/Dev/restapi/src/accounts/api/permissions.py", - "/Users/cfe/Dev/restapi/src/status/api/views.py", - "/Users/cfe/Dev/restapi/src/status/api/serializers.py", - "/Users/cfe/Dev/restapi/src/status/api/urls.py", - "/Users/cfe/Dev/restapi/src/status/models.py", - "/Users/cfe/Dev/restapi/scripts/cfe_rest_framework_api.py", - "/Users/cfe/Dev/restapi/src/accounts/api/views.py", - "/Users/cfe/Dev/restapi/src/accounts/api/serializers.py", - "/Users/cfe/Dev/restapi/src/accounts/api/user/__init__.py", - "/Users/cfe/Dev/restapi/src/accounts/api/user/urls.py", - "/Users/cfe/Dev/restapi/src/accounts/api/user/serializers.py", - "/Users/cfe/Dev/restapi/src/accounts/api/urls.py", - "/Users/cfe/Dev/restapi/src/cfeapi/urls.py", - "/Users/cfe/Dev/restapi/src/accounts/api/user/views.py", - "/Users/cfe/Dev/restapi/src/cfeapi/restconf/pagination.py", - "/Users/cfe/Dev/restapi/src/accounts/api/urls_user.py", - "/Users/cfe/Dev/restapi/README.md", - "/Users/cfe/Dev/restapi/parsed_log.md", - "/Users/cfe/Dev/restapi/src/cfeapi/settings.py", - "/Users/cfe/Dev/restapi/src/accounts/api/__init__.py", - "/Users/cfe/Dev/restapi/src/accounts/api/utils.py", - "/Users/cfe/Dev/restapi/src/cfeapi/restconf/__init__.py", - "/Users/cfe/Dev/restapi/scripts/cfe_pure_api.py", - "/Users/cfe/Dev/restapi/.gitignore", - "/Users/cfe/Dev/restapi/static-server/media-root/status/readme.txt", - "/Users/cfe/Dev/restapi/src/updates/api/views.py", - "/Users/cfe/Dev/restapi/src/status/api/shell_examples.py", - "/Users/cfe/Dev/restapi/src/status/forms.py", - "/Users/cfe/Dev/restapi/src/status/admin.py", - "/Users/cfe/Dev/restapi/src/status/api/__init__.py", - "/Users/cfe/Dev/restapi/src/updates/views.py", - "/Users/cfe/Dev/restapi/src/status/serializers.py", - "/Users/cfe/Dev/restapi/src/updates/models.py", - "/Users/cfe/Dev/restapi/src/updates/forms.py", - "/Users/cfe/Dev/restapi/LICENSE", - "/Users/cfe/Dev/restapi/src/updates/api/utils.py", - "/Users/cfe/Dev/restapi/src/updates/api/urls.py" - ], - "find": - { - "height": 57.0 - }, - "find_in_files": - { - "height": 232.0, - "where_history": - [ - ] - }, - "find_state": - { - "case_sensitive": false, - "find_history": - [ - ], - "highlight": false, - "in_selection": false, - "preserve_case": false, - "regex": false, - "replace_history": - [ - ], - "reverse": false, - "show_context": false, - "use_buffer2": false, - "whole_word": false, - "wrap": true - }, - "groups": - [ - { - "selected": 4, - "sheets": - [ - { - "buffer": 0, - "file": "src/courses/views.py", - "semi_transient": false, - "settings": - { - "buffer_size": 1048, - "regions": - { - }, - "selection": - [ - [ - 162, - 148 - ] - ], - "settings": - { - "syntax": "Packages/Python/Python.sublime-syntax" - }, - "translation.x": 0.0, - "translation.y": 63.0, - "zoom_level": 1.0 - }, - "stack_index": 1, - "type": "text" - }, - { - "buffer": 1, - "file": "src/courses/forms.py", - "semi_transient": false, - "settings": - { - "buffer_size": 182, - "regions": - { - }, - "selection": - [ - [ - 182, - 55 - ] - ], - "settings": - { - "syntax": "Packages/Python/Python.sublime-syntax" - }, - "translation.x": 0.0, - "translation.y": 0.0, - "zoom_level": 1.0 - }, - "stack_index": 4, - "type": "text" - }, - { - "buffer": 2, - "file": "src/courses/templates/courses/course_create.html", - "semi_transient": false, - "settings": - { - "buffer_size": 184, - "regions": - { - }, - "selection": - [ - [ - 184, - 184 - ] - ], - "settings": - { - "syntax": "Packages/HTML/HTML.sublime-syntax" - }, - "translation.x": 0.0, - "translation.y": 0.0, - "zoom_level": 1.0 - }, - "stack_index": 6, - "type": "text" - }, - { - "buffer": 3, - "file": "src/courses/models.py", - "semi_transient": false, - "settings": - { - "buffer_size": 129, - "regions": - { - }, - "selection": - [ - [ - 69, - 69 - ] - ], - "settings": - { - "syntax": "Packages/Python/Python.sublime-syntax" - }, - "translation.x": 0.0, - "translation.y": 0.0, - "zoom_level": 1.0 - }, - "stack_index": 5, - "type": "text" - }, - { - "buffer": 4, - "file": "src/courses/urls.py", - "semi_transient": false, - "settings": - { - "buffer_size": 520, - "regions": - { - }, - "selection": - [ - [ - 165, - 165 - ] - ], - "settings": - { - "syntax": "Packages/Python/Python.sublime-syntax" - }, - "translation.x": 0.0, - "translation.y": 0.0, - "zoom_level": 1.0 - }, - "stack_index": 0, - "type": "text" - }, - { - "buffer": 5, - "file": "src/courses/templates/courses/course_list.html", - "semi_transient": false, - "settings": - { - "buffer_size": 166, - "regions": - { - }, - "selection": - [ - [ - 150, - 150 - ] - ], - "settings": - { - "syntax": "Packages/HTML/HTML.sublime-syntax" - }, - "translation.x": 0.0, - "translation.y": 0.0, - "zoom_level": 1.0 - }, - "stack_index": 2, - "type": "text" - }, - { - "buffer": 6, - "file": "src/products/templates/products/product_list.html", - "semi_transient": true, - "settings": - { - "buffer_size": 212, - "regions": - { - }, - "selection": - [ - [ - 0, - 212 - ] - ], - "settings": - { - "syntax": "Packages/HTML/HTML.sublime-syntax" - }, - "translation.x": 0.0, - "translation.y": 0.0, - "zoom_level": 1.0 - }, - "stack_index": 3, - "type": "text" - } - ] - } - ], - "incremental_find": - { - "height": 80.0 - }, - "input": - { - "height": 80.0 - }, - "layout": - { - "cells": - [ - [ - 0, - 0, - 1, - 1 - ] - ], - "cols": - [ - 0.0, - 1.0 - ], - "rows": - [ - 0.0, - 1.0 - ] - }, - "menu_visible": true, - "output.doc": - { - "height": 0.0 - }, - "output.find_results": - { - "height": 508.0 - }, - "pinned_build_system": "", - "project": "trydjango.sublime-project", - "replace": - { - "height": 156.0 - }, - "save_all_on_build": true, - "select_file": - { - "height": 0.0, - "last_filter": "", - "selected_items": - [ - [ - "email", - "templates/team/email_instructions.html" - ] - ], - "width": 0.0 - }, - "select_project": - { - "height": 0.0, - "last_filter": "", - "selected_items": - [ - ], - "width": 0.0 - }, - "select_symbol": - { - "height": 0.0, - "last_filter": "", - "selected_items": - [ - ], - "width": 0.0 - }, - "selected_group": 0, - "settings": - { - }, - "show_minimap": false, - "show_open_files": true, - "show_tabs": true, - "side_bar_visible": true, - "side_bar_width": 241.0, - "status_bar_visible": true, - "template_settings": - { - } -}