django学习记录

  1. django的hello world
  2. 其它项目中使用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对数据库进行操作了
原文地址:https://www.cnblogs.com/inu1255/p/4444182.html