- django的hello world
- 其它项目中使用django的orm
django
学习django主要是因为最近对python产生了兴趣,听说它是胶水语言,想试试什么叫胶水。
在这里django的安装就不说了,我的python版本是2.7
1. django的hello world
1.1 了解django
django-admin startproject inu #创建工程名字叫inu
#会生成这样的结构
└─inu
│ manage.py #管理脚本
│
└─inu
settings.py #配置脚本
urls.py #url导航脚本
wsgi.py #wsgi脚本,部署到生产服务器的wsgi入口
__init__.py
# 打开开发服务器,用来调试
python manage.py runserver
# 访问http://127.0.0.1:8000你会看到It worked!
cd inu
python manage.py startapp forum
# 这时会生成一个forum文件夹
─forum
│ admin.py
│ models.py
│ tests.py
│ views.py
│ __init__.py
│
└─migrations
__init__.py
下面开始讲django的MTV框架,不同于MVC,django的M对应models.py文件,不得不说django的orm十分有魅力
下文件用到的示例下载地址
下面贴出.py文件的代码只作讲解,练习时请参照下载示例的代码
在django中,为数据库中一个表格创建一个类十分简单,如下所示是一个User表的model
# models.py
from django.db import models
from django.utils import timezone
# Create your models here.
class User(models.Model):
name = models.CharField(max_length=64) # 相当于sql中的varchar(64)
password = models.CharField(max_length=128)
telphone = models.CharField(max_length=16,default='')
school_id = models.CharField(max_length=32,default='')
school_psw = models.CharField(max_length=32,default='')
school = models.CharField(max_length=200,default='')
major = models.CharField(max_length=64,default='')
grade = models.IntegerField(default=0)
birthday = models.DateField('Date birthday',default=timezone.now())
image = models.ImageField(upload_to='forum/static/head/%Y-%m-%d/%H-%M-%S',default='') # upload_to指定上传文件的存储路径%Y表示年,django会根据当前时间保存到forum/static/blog/2015-04-20/15-32-21/0.png,不存在的路径会自动创建
time = models.DateTimeField('Registration Time',default=timezone.now())
type = models.CharField(max_length=32,default='z_none')
def imgUrl(self): # 函数不会影响数据库,只是方便你
return self.image.__str__()[5:]
def __unicode__(self):
return self.name
models.py文件写好后在inu/settings.py(以后称配置文件)中添加'forum'
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'forum', # 加入这一行
)
# 创建数据库表格
manage.py makemigrations
# 下面注释掉这名可以查看sql语句
# manage.py sqlmigrate forum 0001
manage.py migrate
django还有个吸引人的特征是自带的管理系统
# 创建超级管理员
manage.py createsuperuser
# 输入用户名等信息
# 启动服务器
manage.py runserver
# 打开http://localhost:8000/admin/
# 这时只能管理django和管理员组和管理员用户
编辑 forum/admin.py
from django.contrib import admin
from .models import User
# 向admin中注册User数据库,admin就可以管理User数据库了
admin.site.register(User)
刷新网页,你可以看到多出了forum站点的管理项
1.2 开始做网页
讲了这么多还没有看到我们自己的页面,现在开始做一个简单的页面
首先编辑 inu/urls.py文件
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
# Examples:
# url(r'^$', 'inu.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
# 加入这行,把forum/开头的请求引导至 forum/urls.py去处理
url(r'^forum/', include('forum.urls')),
url(r'^admin/', include(admin.site.urls)),
]
再编辑 forum/urls.py (原本没有这个文件,新建一个)
from django.conf.urls import url
from . import views
urlpatterns = [
# 将空请求移交给 views.py的index函数处理
url(r'^$', views.index, name='index'),
]
再编辑 forum/views.py
#coding:utf-8
from django.shortcuts import render
from .models import User
def index(request):
# 获取数据库中全部的用户
user_list = User.objects.all()
context = {'user_list': user_list}
# 交给forum/index.html显示
return render(request, 'forum/index.html', context)
新建forum/templates/forum/index.html文件,内容如下
{% if user_list %}
<ul>
{% for user in user_list %}
<li><a href="">{{ user.name }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No user are available.</p>
{% endif %}
好了大功告成,访问http://localhost:8000/forum/
在http://localhost:8000/admin/中添加一个User,
再访问http://localhost:8000/forum/可以看到刚刚添加的User的名字吧
django的templates文件夹用来存放模板文件,render(request, 'forum/index.html', context)
就是在templates下找forum/index.html
,为什么不直接放在templates下,写成render(request, 'index.html', context)
呢?因为一个django工程可能不止一个应用,可能你有forum和polls两个应用,这时forum和polls文件夹的templates文件夹都有index.html,django就不知道用哪个index.html了
静态文件夹
这里又要说到django的静态文件(.css、.js、.html)目录,如果你的模板中要引用静态文件,把它放在forum/static/
文件夹就行了,
如:forum/static/js/jquery.min.js
,
引用时写<script src="/static/js/jquery.min.js"></script>
就行了
例子中有 django的文件表单,session的简单使用,这里不做言,
django的更多特征还是去官网看看文档吧
其它项目中使用django的orm
│ otherapp.py # 其它项目
│
└─forum
models.py # 从forum/models.py拷贝
settings.py # 从inu/settiongs.py拷贝
__init__.py # 空文件
otherapp.py
# otherapp.py
import os,sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "forum.settings")
from forum.models import User
# 下面就可以利用django的orm对数据库进行操作了