su postgrespsql$ CREATE DATABASE database_name;
Development
App, Web, Mac
1.21.2015
1.07.2015
Remote access postgresql from external client (9.3)
1. Edit pg_hba.conf
vi /etc/postgresql/9.3/main/pg_hba.confadd
host all all [CLIENT_IP]/24 trust
2. Edit postgresql.conf
vi /etc/postgresql/9.3/main/postgresql.confFind 'listen_addresses' and change to
listen_addresses = ‘*’
3. Restart postgresql
sudo service postgresql restart
12.31.2014
First setting project with django.
Assume to finish basic setting by http://jeffgukang.blogspot.kr/2014/12/install-virtualenv-with.html
1.
2. Make Project
Make your database. (mysql, postgresql)
I edited settting.py for PostgreSQL
1.
$ workon yourvirtualenv
2. Make Project
django-admin.py startproject yourproject3. Setup setting.py file.
Make your database. (mysql, postgresql)
su postgres
psql
$ CREATE DATABASE database_name;
I edited settting.py for PostgreSQL
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '[_DBNAME_]
'USER': '[_USERNAME_]',
'PASSWORD': '[_DBPASSWORD_]',
'HOST': 'localhost',
'PORT': '',
}
}
12.17.2014
Simple file upload with Model from templates in django 1.7.
Django page describes how to upload files with form.
https://docs.djangoproject.com/en/dev/topics/http/file-uploads/
But if you want to upload file to model from your template, there is the simple way as follows.
urls.py
It can be any fileField including imageField.
model.py
{% csrf_token %} is for Cross site request forgery
template.html
It looks like
File object will go into request.FILES if you write enctype="multipart/form-data" in your form tag.
And you are able to get the file object through request.FILES['_FILENAME_']
Process of file control is very similar with other languages as C, JAVA.
views.py
Run and check your files and admin site.
https://docs.djangoproject.com/en/dev/topics/http/file-uploads/
But if you want to upload file to model from your template, there is the simple way as follows.
1. Set url patch for POST method.
urls.py
urlpatterns = patterns('',
url(r'^add/post/$', 'photo.views.add_post'),
)
2. Model that has file attributes.
Your model has file attributes.It can be any fileField including imageField.
model.py
class Photo(models.Model):
id = models.AutoField(primary_key=True)
image_file = models.ImageField() #auto uploded MEDIA foler fllowing settings.py
filtered_image_file = models.ImageField()
description = models.TextField(max_length=500, blank=True)
.....
3. Make template form with file input.
Don't forget to write enctype="multipart/form-data" in your form tag.{% csrf_token %} is for Cross site request forgery
template.html
<form method="post" action="/add/post/" enctype="multipart/form-data">
{% csrf_token %}
<ul>
<li><label for="description">Description</label></li>
<li><input type="file" name="file" /></li>
<li><textarea id="description" name="description"></textarea></li>
<li><input type="submit" value="Finish" name="submit" /></li>
</ul>
</form>
It looks like
4. File controller for POST method.
view.py will manage POST method from template.File object will go into request.FILES if you write enctype="multipart/form-data" in your form tag.
And you are able to get the file object through request.FILES['_FILENAME_']
Process of file control is very similar with other languages as C, JAVA.
- Open temporary file stream with authorization.
- Write file in stream.
- Close.
When you treat model with file. - Send file info to model that has file attributes.
- Save model.
views.py
def add_post(request):
message = 'done. '
if request.method == 'POST' :
photo = Photo()
#file upload
if 'file' in request.FILES :
file = request.FILES['file']
filename = file._name
fp = open( '%s/%s' % (/filefolder/, filename), 'wb')
for chunk in file.chunks() :
fp.write(chunk)
fp.close()
photo.image_file = request.FILES['file']
photo.filtered_image_file = request.FILES['file']
message += 'file uploaded';
try :
photo.save()
except :
return HttpResponse('Error!!!')
return HttpResponse('I wrote %s' % message)
Run and check your files and admin site.
Cross-site request forgery (CSRF) issue when use POST form in django 1.7
Cross-site request forgery (CSRF)
I got a message when I tested to send POST form to server.
The reasons of CSRF verification fail are as follows.
https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/#rejected-requests
If you have a question how it works, read this.
https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/#how-it-works
I got a message when I tested to send POST form to server.
Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
CSRF token missing or incorrect.
In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. For POST forms, you need to ensure:
You're seeing the help section of this page because you have
- Your browser is accepting cookies.
- The view function uses
RequestContext
for the template, instead ofContext
.- In the template, there is a
{% csrf_token %}
template tag inside each POST form that targets an internal URL.- If you are not using
CsrfViewMiddleware
, then you must usecsrf_protect
on any views that use thecsrf_token
template tag, as well as those that accept the POST data.DEBUG = True
in your Django settings file. Change that toFalse
, and only the initial error message will be displayed.
You can customize this page using the CSRF_FAILURE_VIEW setting.
The reasons of CSRF verification fail are as follows.
https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/#rejected-requests
By default, a ‘403 Forbidden’ response is sent to the user if an incoming request fails the checks performed by CsrfViewMiddleware. This should usually only be seen when there is a genuine Cross Site Request Forgery, or when, due to a programming error, the CSRF token has not been included with a POST form.
The error page, however, is not very friendly, so you may want to provide your own view for handling this condition. To do this, simply set the CSRF_FAILURE_VIEW setting.
Solution
https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/#how-to-use-it- Add the middelware in your setting.py. (I already have added it.)
MIDDLEWARE_CLASSES = (
...
'django.middleware.csrf.CsrfViewMiddleware', #for csrf
)
Alternatively, you can use the decorator csrf_protect() on particular views you want to protect (see below).
- Use the csrf_token tag in your any template that uses a POST form.
- Use RequestContext() instead of Context()
def write_form(request) :
page_title = 'Upload your photo'
tpl = loader.get_template('write.html')
# use RequestContext for csrf
ctx = RequestContext(request, {
'page_title': page_title,
})
# ctx = Context({
# 'page_title': page_title,
# })
return HttpResponse(tpl.render(ctx))
If you have a question how it works, read this.
https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/#how-it-works
12.08.2014
Django tips
Custom urls.py
String literals may optionally be prefixed with a letter 'r' or 'R'; such strings are called raw strings and use different rules for interpreting backslash escape sequences.(https://docs.python.org/2/reference/lexical_analysis.html#strings)https://docs.djangoproject.com/en/1.7/topics/http/urls/
http://www.webforefront.com/django/regexpdjangourls.html
Static files for image, css
https://docs.djangoproject.com/en/1.7/howto/static-files/Directory of image files(MEDIA_ROOT)
Your file will be uploaded in MEDIA_ROOT folder that defined in settings.py.class Photo(models.Model):
image_file = models.ImageField(upload_to='image')
Image_file would go into the 'image' subdirectory of MEDIA_ROOT
Example
setting.py....
MEDIA_URL = '/media/' #HTTP
MEDIA_ROOT = os.path.join(BASE_DIR, 'static_files')
urls.py
...
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
model.spy
class Photo(models.Model):Your image file will be saved in ..../static_files/image/ . (setting.py, models.py)
image_file = models.ImageField(upload_to='image')
You can see your image file below address. (urls.py)
http://ADDRESS/media/IMAGE_FILE
Get next model or previous model
models.py
...view.py
class Photo(models.Model):
created_at = models.DateTimeField(auto_now_add=True, auto_now=False)
...
def single_photo( request, photo_id) :
photo = get_object_or_404(Photo, pk=photo_id)
preveous_entry = photo.get_previous_by_created_at()
next_entry = photo.get_next_by_created_at()
Get all objects or using specific filter
Photo.objects.all().order_by()[start_pos:end_pos]Apply to Templates.
settings.py
...views.py
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates'), ] #must be tuple
...
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Photo #photo.models
from django.template import Context, loader
def single_photo( request, photo_id) :
photo = get_object_or_404(Photo, pk=photo_id)
preveous_entry = photo.get_previous_by_created_at()
next_entry = photo.get_next_by_created_at()
tpl = loader.get_template('photo.html')
ctx = Context({
'image2_url' : photo.filtered_image_file.url,
'prev_entry': preveous_entry,
'next_entry': next_entry,
'prev_id': preveous_entry.id,
'next_id': next_entry.id,
})
return HttpResponse(tpl.render(ctx))
photo.html
- {{prev_id}}번 글
{% endif %}
{% if next_entry %}
- {{next_id}}번 글
{% endif %}
url.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^photo/(?P\d+)$', 'photo.views.single_photo', name = 'view_single_photo'),
)
Django nginx, gunicorn
django nginx, gunicorn12.07.2014
Install virtualenv with virtualenvwrapper for python3.4 and django1.7 on Linux(ubuntu).
Virtual Environment(virtualenv) make easy to manage various environment for development.
It can create environment for each different version of python.
Install virtualenv.
$ sudo pip install virtualenv
Install virtualenvwrapper for easy control.
$ pip install virtualenvwrapper
Make virtualenv home directory.
$ mkdir ~/.virtualenvs
Setup for shell.
Write directory for work in ~/.bashrcexport WORKON_HOME=$HOME/.virtualenvsFor execute virtualenvwrapper. (in ~/.bashrc)
export PROJECT_HOME=$HOME/[YOUR_WORKSPACE]
source /usr/local/bin/virtualenvwrapper.shApply.
$ source ~/.bashrcCheck.
$ echo $WORKON_HOME
Make virtualenv for python3. (Assume python3.4 was installed.)
$ mkvirtualenv --python=/usr/bin/python3 [ENV_NAME]It will make virtualenv in your WORKON_HOME directory.
Check.
$ echo $WORKON_HOME
$ ls $WORKON_HOME
$ workonCheck your python version.
$ python --version
Install django on your virtual env (1.7)
Go into your virtual env.$ workon [ENV_NAME]
Install django.
$ pip install django
Basic command for management.
Check your virtualenv projects.
workonGo into virtualenv.
workon [ENV_NAME]Deactivate from virtualenv.
deactivate
Subscribe to:
Posts (Atom)