django-admin.py startproject trydjango
check to see it in browser, this is using vagrant and a vm so the extra 0.0.0.0:port is needed
python manage.py runserver 0.0.0.0:port
--->> 127.0.0.1:port in browser
python manage.py migrate
python manage.py createsuperuser
put in -u vagrant -p password
show all available commands
python manage.py
python manage.py startapp posts
---> /src/posts/models.py
create Post class with title content, update, timestamp, unicode function
---> /src/trydjango/settings.py
add 'posts' to settings.py --> INSTALLED_APPS
python manage.py migrate
python manage.py makemigrations
python manage.py migrate
--> post model in database.
---> /src/posts/admin.py
from .models import Post
admin.site.register(Post)
---> check go to python manage.py 0.0.0.0:8100/admin
and posts should be there.
[https://docs.djangoproject.com/en/1.10/ref/contrib/admin/](django admin doc)
---> /src/posts/admin.py
add PostModelAdmin class and add to register
add list_display, list_display_links, and list_filters
1.CREATE -- POST
2.READ -- GET -- List / Search
3.UPDATE -- PUT/PATCH -- Edit
4.DELETE -- DELETE -- Delete
---> /src/posts/views.py
from django.http import HttpResponse
def post_create(request):
return HttpResponse("<h1>Create!</h1>")
---> /src/trydjango/urls.py
from django.conf.urls import url, include
from django.contrib import admin
from posts import urls
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^posts/', include(urls)),
]
---> /src/posts/urls.py
from django.conf.urls import url
from posts import views
urlpatterns = [
url(r'^$', views.post_list, name="post_list"),
url(r'^create/$', views.post_create, name="post_create"),
url(r'^detail/$', views.post_detail, name="post_detail"),
url(r'^update/$', views.post_update, name="post_update"),
url(r'^delete/$', views.post_delete, name="post_delete"),
]
---> /root/src/settings.py add -- TEMPLATES
'DIRS': [os.path.join(BASE_DIR, 'templates')],
---> /root/src/posts/views.py
def post_list(request):
return render(request, "index.html", {})
python manage.py shell
>>>from posts.models import Post`
>>>Post.objects.all()
<QuerySet [<Post: this is a title>, <Post: test title>]>
>>>Post.objects.filter(title="abc")
[]
>>>Post.objects.create(title="New Title", content="New Content")
<Post: New Title>
>>> Post.objects.all()
<QuerySet [<Post: this is a title>, <Post: test title>, <Post: New Title>]>
queryset = Post.objects.all()
for object in queryset:
print object.id
print object.title
print object.content
great django url regex reference here
---> /src/posts/urls.py
url(r'^detail/(?P<id>\d+)$', views.post_detail, name="post_detail"),
---> /src/posts/.views.py
def post_detail(request, id):
---> /src/posts/urls.py name="post_detail"
<a href='{% url "post_detail" id=obj.id %}'>{{ obj.title }}</a>
<a href='/posts/{{ obj.id }}'>{{ obj.title }}</a>
{% url "posts:post_detail" id=obj.id %}
<a href="{{ obj.get_absolute_url }}">{{ obj.title }}</a>
<a href='{% url "posts:post_detail" id=obj.id %}'>{{ obj.title }}</a>
ModelForm docs form docs ---> /src/posts/forms.py
---> /src/posts/views.py
docs ---> /src/trydjango/settings.py /src/trydjango/urls.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
# '/var/www/static/',
]
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static_cdn")
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "media_cdn")
python manage.py collectstatic
sends development static files to cdn static folder
<p>{{ obj.content | linebreaks | truncatechars:130 }}</p>
{{ obj.timestamp|timesince }}
{{ instance.content | linebreaks }}
{% cycle "" "</div><div class='col-sm-12'><hr></div><div class='row'>" %}
here
queryset = Post.objects.all().order_by("-timestamp")
- models - ImageField or FileField
- change upload location by function
- html -
- views - request.FILES or None
plus code in vid. 1- First you have to change your urlpatterns in the posts/urls.py for something like this:
urlpatterns = [
url(r'^$', post_list, name='list'),
url(r'^create/$', post_create),
url(r'^(?P<slug>[\w-]+)/$', post_detail, name='detail'),
url(r'^(?P<slug>[\w-]+)/edit/$', post_update, name='update'),
url(r'^(?P<slug>[\w-]+)/delete/$', post_delete),
]
2- Go to your posts/views.py and replace (in the post_detail, post_update and post_delete) "id" for "slug". for each functions there are 3 "id" that need to be modified.
{{ request.build.uri }}
from urllib import quote_plus
share_string = quote_plus(instance.content)
this will let us turn any string to something we can share.
---> src/posts/templatetags/urlify.py
from urllib import quote_plus
from django import template
register = template.Library()
@register.filter
def urlify(value):
return quote_plus(value)
{{ instance.content | urlify }}
docs ---> src/trydjango/settings.py
ALLOWED_HOSTS = []
EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = "me@jeffreiher.com"
EMAIL_HOST_PASSWORD = os.environ["EMAIL_HOST_PASSWORD"]
EMAIL_PORT = 587
EMAIL_USE_TLS = True
If using gmail, you will need to unlock Captcha to enable Django to send for you.
https://accounts.google.com/displayunlockcaptcha
send_mail(
form_subject,
contact_message,
from_email,
['jreiher2003@yahoo.com'],
fail_silently=False,
)