• 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对数据库进行操作了
    
  • 相关阅读:
    改变windows下installer文件夹位置,目录链接(不是快捷方式)
    SQL2008根据日志恢复
    HTML5实践
    人类的本能——自私与善
    打油诗 看《大上海》
    POSA2:Wrapper Facade模式
    解析XML文件
    MediaWiki编辑工具
    每周一荐:设计模式
    每周一荐:分布式计算的模式语言
  • 原文地址:https://www.cnblogs.com/inu1255/p/4444182.html
Copyright © 2020-2023  润新知