https://docs.djangoproject.com/en/1.4/
Django系统搭建
一. 建立一个pydjango的项目
初始的项目包括根目录的manage.py,以及一个以project name命名的文件夹(包含settings.py, urls.py,和一个wsgi.py)
如果project包含多个app,那么应该建立多个包,然后在每个包创建自己的urls设置和models,然后建立一个总的urls转发到各app的url中。
二、修改settings.py
1. 数据库连接
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'blogdemo', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': '111111', # Not used with sqlite3.
'HOST': '127.0.0.1', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '3306', # Set to empty string for default. Not used with sqlite3.
}
}
2. 时区和语言
TIME_ZONE='Asia/Beijing'
LANGUAGE_CODE='zh-cn'
3.模板目录
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
os.path.join(os.path.dirname(__file__), 'template').replace('\\','/'),
'.',
)
4. 支持的app
支持的app 注意包的路径.如果model没在这里注册的话,那么将syncdb则无法自动生成表
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.admindocs',
#上边的都是默认的
'blogdemo',
)
5. media路径:保存媒体文件的路径(上传的文件保存路径等等)
HERE = os.path.dirname(os.path.abspath(__file__))
MEDIA_ROOT = os.path.join(HERE, 'media/').replace('\\','/')
MEDIA_URL = '/media/
6. 静态文件路径:css,js,image等等
STATIC_ROOT = os.path.join(HERE, 'collectedstatic').replace('\\','/')
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
os.path.join(HERE, 'static').replace('\\','/'),
)
7. 系统的最顶层url映射地址。默认的'urls'是与manage.py同级目录的urls.py
ROOT_URLCONF = 'package.urls'
8. wsgi配置:
# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'config.wsgi.application'
三. 创建应用: blogdemo
1. 建立一个models.py
#!usr/bin/env python
#coding: utf-8
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=32)
def __unicode__(self):
return self.name
class Admin:
pass
2. 同步DB
建立好这个model后(当然任何时候都可以执行下述的命令来创建数据库)
python manage.py validate来验证是不是正确的models路径配置
python manage.py sqlall blogdemo 来展示如何创建sql数据库脚本
python manage.py syncdb 来创建数据库表
python manage.py dbshell 进入db的shell
python manage.py createsuperuser 创建超级用户
3. 建立url配置:
admin.autodiscover() #这一行是为了给管理员加具体模块操作的权限的,如果没有,那么管理员就无法对数据库中的model进行直接操作
urlpatterns = patterns('',
(r'^$', 'blogdemo.views.listArticle'),
(r'^admin/', include(admin.site.urls)),
)
4. 注册管理员界面(如果需要的话)
在app下建立admin.py文件 (settings中的'django.contrib.admin'是对应的管理admin的app,如果没添加到install_app中,那么要加上)
admin.site.register(Category)
5. 添加views.py与数据库和模板交互。这里只给了个获取全部article的
from blogdemo.models import Article
from django.shortcuts import render
def listArticle(request):
lists=Article.objects.all()
return render(request,'article_list.html', {'object_list': lists})
6. 建立模板。在已经创建的template下(看settings中的设置路径)
article_list.html:
{% if object_list %}
{% for article in object_list %}
<div class="article">
<div class="title"><a href="/blog/{
{ article.id }}">{
{ article.title }}</a></div>
</div>
{% endfor %}
{% else %}
<p>對不起沒有文章喔!</p>
{% endif %}
7. 运行服务 http://localhost:8000/admin和http://localhost:8000/
8. 如果需要上传文件,则需要添加如下设计:
urls中增加media url映射
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
model中增加类型:
link = models.FileField(upload_to='rateTemplate/%Y%m%d%H%M%S/')
settings中增加:
HERE = os.path.dirname(os.path.abspath(__file__))
MEDIA_ROOT = os.path.join(HERE, 'media/').replace('\\','/')
MEDIA_URL = '/media/'
DjangoDB基本操作:
一、模型定义
https://docs.djangoproject.com/en/1.4/topics/db/models/
Django模型是django.db.models.Model的子类
class Entry(models.Model):
name = models.CharField(u'name', max_length=64, db_index=True, unique=True)
def __unicode__(self):
pass #定义print时对象展现的数据
class Admin:
pass #是否支持Django Admin管理
class Meta:
#权限,表明等可选信息 Meta options - https://docs.djangoproject.com/en/1.4/ref/models/options/
db_table = 'metadata_keyword' #model在db中对应的表名
permissions = (
(&