• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
inu1255
博客园    首页    新随笔    联系   管理    订阅  订阅

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对数据库进行操作了
posted @ 2015-04-21 14:00  inu1255  阅读(237)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3