Suselinux下Django開發備忘

pythonDjango開發備忘

一、Django安裝,下載Django安裝包。(注:mod_python模塊不再支持Django1.5以上版本)

1) 首先需要在YaST中安裝  python-setuptools包,然後執行安裝

# python setup.py install

# python

>> import django

>> django.VERSION

開啓SetEnv模塊,或在yast中開啓。(注,我沒找到)

# sudo a2enmod env

2) 創建項目 phinfo:

# cd /srv/www/htdocs

# django-admin.py startproject phinfo

開啓測試服務器命令爲# python manage.py runserver注:默認端口爲8000

# cd phinfo

# python manage.py runserver 10.120.65.10:8000

 

二、安裝mod_wsgi

1) 先安裝apache2開發包,下載mod_wsgi-4.5.6.tar.gz

# tar zxvf mod_wsgi-4.5.6.tar.gz

# cd mod_wsgi-4.5.6

# python setup.py install

 

2) wsgi配置,注意:首先要在http服務配置中禁用mod_python

首配置httpd.confloadmodule wsgi_module /somepath/mod_wsgi.so

然後再httpd服務器中激活

# sudo a2enmod wsgi

接下來在httpd.conf中配置phinfo項目

# cd /etc/apache2/

# vi http.conf

增加以下內容:

WSGIScriptAlias /phinfo /srv/www/htdocs/phinfo/phinfo/wsgi.py

WSGIPythonPath /srv/www/htdocs/phinfo

<Directory /srv/www/htdocs/phinfo/phinfo>

  <IfModule mod_access_compat.c>

    Order allow,deny

    Allow from all

  </IfModule>

</Directory>

 

編輯 /srv/www/htdocs/phinfo/phinfo/wsgi.py 如下:

# filename django.wsgi

import os,sys

 

os.environ.setdefault('DJANGO_SETTINGS_MODULE','phinfo.settings')

os.environ['PYTHON_EGG_CACHE']='/tmp'

 

from django.core.wsgi import get_wsgi_application

application=get_wsgi_application()

 

3) 最後進入項目,編輯urls.pyviews.py等開始項目開發。

views.py

from django.http import HttpResponse,Http404

import datetime

def hello(req):

    return HttpResponse("<h1>Hello World, It is phinfo.</h1>")

def homepage(req):

    return HttpResponse("This is phinfo's Homepage")

 

urls.py

from django.conf.urls import url

#from django.contrib import admin

from phinfo.view import hello,homepage

urlpatterns = [

    url(r'^hello/$', hello),

    url(r'^$', homepage),

]

 

調用: http://127.0.0.1/phinfo/hello .......

 

三、靜態資源配置

1) 創建靜態文件目錄

/srv/www/htdocs/phinfo下創建目錄 static,目錄下開設 cssimgjs等靜態文件目錄。

2) 在httpd.conf中配置

Alias /static /srv/www/htdocs/phinfo/static

<Directory /srv/www/htdocs/phinfo/static>

  <IfModule mod_access_compat.c>

    Require all granted

  </IfModule>

</Directory>

 

3) 配置settings.py

STATIC_URL = '/static/'      #此值應與httpd.conf中配置相同

 

4) 靜態文件使用

{% load static %}

<img src="{% static 'img/01.jpg' %}" alt="img01" >

 

四、基本模板配置

1) 在/srv/www/htdocs/phinfo開設模板目錄 templates,可以開子目錄分類,如html

2) 編輯settings.py,更改TEMPLATES DIRS項。

TEMPLATES = [

    {

        'BACKEND': 'django.template.backends.django.DjangoTemplates',

        'DIRS': [

            os.path.join(BASE_DIR,'templates'),

        ],

...

    },

]

3) 在templates/html下編輯base.html,以及current_datetime.html

基本模板base.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

<html>

{% load static %}

<head>

  <title>{% block title %}{% endblock %}</title>

</head>

<body>

  <h1>My helpful timestamp site</h1>

  {% block content %}{% endblock %}

  {% block image %} {% endblock %}

  {% block footer %}

  <hr>

  <p>Thanks for visiting my site.</p>

  {% endblock %}

</body>

<html>

 

實際擴展模板current_datetime.html

{% extends "html/base.html" %}

{% load static %}

{% block title %} The current time {% endblock %}

{% block content %}

<p> It is now {{ current_date }}. </p>

{% endblock %}

{% block image %}

<p>{% static 'img/01.jpg' %}</p>

<img src="{% static 'img/01.jpg' %}" alt="img01" >

{% endblock %}

 

4)模板應用,編輯views.py

from django.http import HttpResponse,Http404

import datetime

from django.template import loader,Context,RequestContext

from django.shortcuts import render_to_response

 

def current_datetime(req):

    current_date = datetime.datetime.now()

    return render_to_response('html/current_datetime.html',locals())

 

 

五、新建應用

1)在phinfo下新建應用phadmin

# django-admin.py startapp phadmin

2) 編輯settings,配置INSTALLED_APPS 

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

'django.contrib.staticfiles',

    ‘phadmin’,

]

3) 編輯views.pyurls.py

views.py

from django.shortcuts import render

from django.http import HttpResponse,Http404

import datetime

from django.template import loader,Context,RequestContext

from django.shortcuts import render_to_response

def adminhello(req):

    return HttpResponse("<h1>Hello World, It is phinfo/phadmin.</h1>")

def adminhomepage(req):

    return HttpResponse("This is phinfo/phadmin's Homepage")

urls.py

from django.conf.urls import url

#from django.contrib import admin

from phinfo.view import hello,homepage,current_datetime,ctime

from phadmin.views import *

urlpatterns = [

    url(r'^ctime/(\d{1,2})/$', ctime),

    url(r'^current_datetime/$', current_datetime),

    url(r'^hello/$', hello),

    url(r'^$', homepage),

    url(r'^phadmin/hello/$', adminhello),

    url(r'^phadmin/$', adminhomepage),

]

4)調用

http://.../phinfo/phadmin/hello

 

5)urlinclude的使用

phadminurls.py

from django.conf.urls import url

from phadmin import views

 

urlpatterns = [

    url(r'^hello/$', views.hello),

    url(r'^$', views.homepage),

    url(r'^infolist/$', views.infolist),

    url(r'^infoajax/$', views.infoajax),

]

phinfo下的urls.py

from django.conf.urls import url,include

from django.contrib import admin

from phinfo.view import hello,homepage,current_datetime,ctime

 

urlpatterns = [

    url(r'^ctime/(\d{1,2})/$', ctime),

    url(r'^current_datetime/$', current_datetime),

    url(r'^hello/$', hello),

    url(r'^$', homepage),

    url(r'^phadmin/', include('phadmin.urls')),

    url(r'^admin/', admin.site.urls),

]


六、數據庫

1) 配置數據庫,更改setting.py

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'phinfodb',

        'USER': 'phinfo',

        'PASSWORD': '85124206',

        'HOST':'127.0.0.1',

        'PORT':'3306',

    }

}

2) 根據數據庫生成Models,注意中文表名生成會出錯,另外所有表都應有一主鍵。可以新建一app名爲model,在model下生成models.py

# python manage.py inspectdb > model/models.py

 

3) 數據庫查詢操作


查詢所有: Phinfo.objects.all()

查詢一個記錄:Phinfo.objects.get(name=name)

查詢滿足指定條件記錄:

    Phinfo.objects.filter(name=name) #等於name_exact,名稱嚴格等於abc

Phinfo.objects.filter(name__iexact=’abc’)  #名稱爲abc,但不區分大小寫

Phinfo.objects.filer(name__contains=’abc’) #名稱中包含’abc’,區分大小寫

Phinfo.objects.filer(name__icontains=’abc’) #名稱中包含’abc’,不區分大小寫

Phinfo.objects.filer(name__regex=’^abc’) #正則表達式

Phinfo.objects.filer(name__iregex=’abc’) #正則表達式,不區分大小寫

Phinfo.objects.exclude(name__contains=’abc’) #配出名稱中包含’abc’

Phinfo.objects.filer(name__contains=’abc’).exclude(age=23) #名稱中包含’abc’,排除年齡是23

 

七、Ajax

1) @csrf_exempt標籤,避免csrf認證引起的403錯誤。JsonResponse參數爲一個字典列表,這時一定要設置safe=False

from django.http import JsonResponse

from django.views.decorators.csrf import csrf_protect,csrf_exempt

@csrf_exempt

def infoajax(req):

    infolist= Phinfo.objects.all()[20:30]

    infos = []

    for info in infolist:

        info_dict = {}

        info_dict['id'] = info.id

        info_dict['title'] = info.title

        info_dict['lb'] = info.lb

        infos.append(info_dict)

 

return JsonResponse(infos,safe=False)

 

urls.py

from django.conf.urls import url

from phadmin import views

 

urlpatterns = [

    url(r'^hello/$', views.hello),

    url(r'^$', views.homepage),

    url(r'^infolist/$', views.infolist),

    url(r'^infoajax/$', views.infoajax),

 

]

 

2) 客戶端

$(document).ready(function() {

    //getInfos();

    $.post (

        'infoajax/',     #注意調用url

        {},

        function(data) {

            var json = eval(data);

            $('#infodiv').html('');

            $('#infodiv').append('<ul>');

            for(i=0;i<json.length;i++) {

                $('#infodiv').append('<li>' + json[i].title +'</li>');

            }

            $('#infodiv').append('</ul>');

        }

    );

});

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章