关闭

Suselinux下Django开发备忘

标签: python django
87人阅读 评论(0) 收藏 举报
分类:

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>');

        }

    );

});

 


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5142次
    • 积分:140
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论