@ -0,0 +1,274 @@ | |||
# Created by https://www.toptal.com/developers/gitignore/api/osx,pycharm,python | |||
# Edit at https://www.toptal.com/developers/gitignore?templates=osx,pycharm,python | |||
### OSX ### | |||
# General | |||
.DS_Store | |||
.AppleDouble | |||
.LSOverride | |||
# Icon must end with two \r | |||
Icon | |||
# Thumbnails | |||
._* | |||
# Files that might appear in the root of a volume | |||
.DocumentRevisions-V100 | |||
.fseventsd | |||
.Spotlight-V100 | |||
.TemporaryItems | |||
.Trashes | |||
.VolumeIcon.icns | |||
.com.apple.timemachine.donotpresent | |||
# Directories potentially created on remote AFP share | |||
.AppleDB | |||
.AppleDesktop | |||
Network Trash Folder | |||
Temporary Items | |||
.apdisk | |||
### PyCharm ### | |||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider | |||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 | |||
# User-specific stuff | |||
.idea/**/workspace.xml | |||
.idea/**/tasks.xml | |||
.idea/**/usage.statistics.xml | |||
.idea/**/dictionaries | |||
.idea/**/shelf | |||
# Generated files | |||
.idea/**/contentModel.xml | |||
# Sensitive or high-churn files | |||
.idea/**/dataSources/ | |||
.idea/**/dataSources.ids | |||
.idea/**/dataSources.local.xml | |||
.idea/**/sqlDataSources.xml | |||
.idea/**/dynamic.xml | |||
.idea/**/uiDesigner.xml | |||
.idea/**/dbnavigator.xml | |||
# Gradle | |||
.idea/**/gradle.xml | |||
.idea/**/libraries | |||
# Gradle and Maven with auto-import | |||
# When using Gradle or Maven with auto-import, you should exclude module files, | |||
# since they will be recreated, and may cause churn. Uncomment if using | |||
# auto-import. | |||
# .idea/artifacts | |||
# .idea/compiler.xml | |||
# .idea/jarRepositories.xml | |||
# .idea/modules.xml | |||
# .idea/*.iml | |||
# .idea/modules | |||
# *.iml | |||
# *.ipr | |||
# CMake | |||
cmake-build-*/ | |||
# Mongo Explorer plugin | |||
.idea/**/mongoSettings.xml | |||
# File-based project format | |||
*.iws | |||
# IntelliJ | |||
out/ | |||
# mpeltonen/sbt-idea plugin | |||
.idea_modules/ | |||
# JIRA plugin | |||
atlassian-ide-plugin.xml | |||
# Cursive Clojure plugin | |||
.idea/replstate.xml | |||
# Crashlytics plugin (for Android Studio and IntelliJ) | |||
com_crashlytics_export_strings.xml | |||
crashlytics.properties | |||
crashlytics-build.properties | |||
fabric.properties | |||
# Editor-based Rest Client | |||
.idea/httpRequests | |||
# Android studio 3.1+ serialized cache file | |||
.idea/caches/build_file_checksums.ser | |||
### PyCharm Patch ### | |||
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 | |||
# *.iml | |||
# modules.xml | |||
# .idea/misc.xml | |||
# *.ipr | |||
# Sonarlint plugin | |||
# https://plugins.jetbrains.com/plugin/7973-sonarlint | |||
.idea/**/sonarlint/ | |||
# SonarQube Plugin | |||
# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin | |||
.idea/**/sonarIssues.xml | |||
# Markdown Navigator plugin | |||
# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced | |||
.idea/**/markdown-navigator.xml | |||
.idea/**/markdown-navigator-enh.xml | |||
.idea/**/markdown-navigator/ | |||
# Cache file creation bug | |||
# See https://youtrack.jetbrains.com/issue/JBR-2257 | |||
.idea/$CACHE_FILE$ | |||
# CodeStream plugin | |||
# https://plugins.jetbrains.com/plugin/12206-codestream | |||
.idea/codestream.xml | |||
### Python ### | |||
# Byte-compiled / optimized / DLL files | |||
__pycache__/ | |||
*.py[cod] | |||
*$py.class | |||
# C extensions | |||
*.so | |||
# Distribution / packaging | |||
.Python | |||
build/ | |||
develop-eggs/ | |||
dist/ | |||
downloads/ | |||
eggs/ | |||
.eggs/ | |||
lib/ | |||
lib64/ | |||
parts/ | |||
sdist/ | |||
var/ | |||
wheels/ | |||
pip-wheel-metadata/ | |||
share/python-wheels/ | |||
*.egg-info/ | |||
.installed.cfg | |||
*.egg | |||
MANIFEST | |||
# PyInstaller | |||
# Usually these files are written by a python script from a template | |||
# before PyInstaller builds the exe, so as to inject date/other infos into it. | |||
*.manifest | |||
*.spec | |||
# Installer logs | |||
pip-log.txt | |||
pip-delete-this-directory.txt | |||
# Unit test / coverage reports | |||
htmlcov/ | |||
.tox/ | |||
.nox/ | |||
.coverage | |||
.coverage.* | |||
.cache | |||
nosetests.xml | |||
coverage.xml | |||
*.cover | |||
*.py,cover | |||
.hypothesis/ | |||
.pytest_cache/ | |||
pytestdebug.log | |||
# Translations | |||
*.mo | |||
*.pot | |||
# Django stuff: | |||
*.log | |||
local_settings.py | |||
db.sqlite3 | |||
db.sqlite3-journal | |||
# Flask stuff: | |||
instance/ | |||
.webassets-cache | |||
# Scrapy stuff: | |||
.scrapy | |||
# Sphinx documentation | |||
docs/_build/ | |||
doc/_build/ | |||
# PyBuilder | |||
target/ | |||
# Jupyter Notebook | |||
.ipynb_checkpoints | |||
# IPython | |||
profile_default/ | |||
ipython_config.py | |||
# pyenv | |||
.python-version | |||
# pipenv | |||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. | |||
# However, in case of collaboration, if having platform-specific dependencies or dependencies | |||
# having no cross-platform support, pipenv may install dependencies that don't work, or not | |||
# install all needed dependencies. | |||
#Pipfile.lock | |||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow | |||
__pypackages__/ | |||
# Celery stuff | |||
celerybeat-schedule | |||
celerybeat.pid | |||
# SageMath parsed files | |||
*.sage.py | |||
# Environments | |||
.env | |||
.venv | |||
env/ | |||
venv/ | |||
ENV/ | |||
env.bak/ | |||
venv.bak/ | |||
# Spyder project settings | |||
.spyderproject | |||
.spyproject | |||
# Rope project settings | |||
.ropeproject | |||
# mkdocs documentation | |||
/site | |||
# mypy | |||
.mypy_cache/ | |||
.dmypy.json | |||
dmypy.json | |||
# Pyre type checker | |||
.pyre/ | |||
# pytype static type analyzer | |||
.pytype/ | |||
# End of https://www.toptal.com/developers/gitignore/api/osx,pycharm,python | |||
.idea |
@ -0,0 +1,2 @@ | |||
[settings] | |||
profile=black |
@ -0,0 +1,30 @@ | |||
repos: | |||
- repo: https://github.com/pre-commit/pre-commit-hooks | |||
rev: v3.2.0 | |||
hooks: | |||
- id: check-ast | |||
types: [python] | |||
# - id: check-json | |||
# types: [json] | |||
- id: check-toml | |||
types: [toml] | |||
# - id: check-xml | |||
# types: [xml] | |||
- id: end-of-file-fixer | |||
- id: pretty-format-json | |||
args: | |||
- --autofix | |||
- --no-sort-keys | |||
- id: trailing-whitespace | |||
args: | |||
- --markdown-linebreak-ext=md | |||
- repo: https://github.com/timothycrosley/isort | |||
rev: 5.4.1 | |||
hooks: | |||
- id: isort | |||
types: [python] | |||
- repo: https://github.com/psf/black | |||
rev: stable | |||
hooks: | |||
- id: black | |||
types: [python] |
@ -0,0 +1,6 @@ | |||
from django.contrib import admin | |||
from django.contrib.auth.admin import UserAdmin | |||
from .models import User | |||
admin.site.register(User, UserAdmin) |
@ -0,0 +1,5 @@ | |||
from django.apps import AppConfig | |||
class ArticlesConfig(AppConfig): | |||
name = "articles" |
@ -0,0 +1,6 @@ | |||
from django.contrib.auth.models import AbstractUser | |||
from django.db import models | |||
class User(AbstractUser): | |||
pass |
@ -0,0 +1,3 @@ | |||
from django.test import TestCase | |||
# Create your tests here. |
@ -0,0 +1,3 @@ | |||
from django.shortcuts import render | |||
# Create your views here. |
@ -0,0 +1,16 @@ | |||
""" | |||
ASGI config for blog 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/3.1/howto/deployment/asgi/ | |||
""" | |||
import os | |||
from django.core.asgi import get_asgi_application | |||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blog.settings") | |||
application = get_asgi_application() |
@ -0,0 +1,116 @@ | |||
""" | |||
Django settings for blog project. | |||
Generated by 'django-admin startproject' using Django 3.1. | |||
For more information on this file, see | |||
https://docs.djangoproject.com/en/3.1/topics/settings/ | |||
For the full list of settings and their values, see | |||
https://docs.djangoproject.com/en/3.1/ref/settings/ | |||
""" | |||
from pathlib import Path | |||
# Build paths inside the project like this: BASE_DIR / 'subdir'. | |||
BASE_DIR = Path(__file__).resolve(strict=True).parent.parent | |||
# Quick-start development settings - unsuitable for production | |||
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/ | |||
# SECURITY WARNING: keep the secret key used in production secret! | |||
SECRET_KEY = "s#!83!8e$3s89m)r$1ghsgxbndf8=#^qt(_*o%xbq0j2t8#db5" | |||
# 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", | |||
] | |||
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 = "blog.urls" | |||
TEMPLATES = [ | |||
{ | |||
"BACKEND": "django.template.backends.django.DjangoTemplates", | |||
"DIRS": [], | |||
"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 = "blog.wsgi.application" | |||
# Database | |||
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases | |||
DATABASES = { | |||
"default": { | |||
"ENGINE": "django.db.backends.sqlite3", | |||
"NAME": BASE_DIR / "db.sqlite3", | |||
} | |||
} | |||
# Password validation | |||
# https://docs.djangoproject.com/en/3.1/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/3.1/topics/i18n/ | |||
LANGUAGE_CODE = "en-us" | |||
TIME_ZONE = "UTC" | |||
USE_I18N = True | |||
USE_L10N = True | |||
USE_TZ = True | |||
# Static files (CSS, JavaScript, Images) | |||
# https://docs.djangoproject.com/en/3.1/howto/static-files/ | |||
STATIC_URL = "/static/" | |||
AUTH_USER_MODEL = "articles.User" |
@ -0,0 +1,21 @@ | |||
"""blog URL Configuration | |||
The `urlpatterns` list routes URLs to views. For more information please see: | |||
https://docs.djangoproject.com/en/3.1/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 | |||
urlpatterns = [ | |||
path("admin/", admin.site.urls), | |||
] |
@ -0,0 +1,16 @@ | |||
""" | |||
WSGI config for blog 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/3.1/howto/deployment/wsgi/ | |||
""" | |||
import os | |||
from django.core.wsgi import get_wsgi_application | |||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "blog.settings") | |||
application = get_wsgi_application() |
@ -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", "blog.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() |
@ -0,0 +1,2 @@ | |||
[tool.black] | |||
target-version = ['py38'] |
@ -0,0 +1,2 @@ | |||
django==3.1 | |||
pre-commit==2.6.0 |