zoukankan      html  css  js  c++  java
  • django 官方教程翻译-part1

    开始写第一个django 应用
    第一部分
    通过这个教程,可以让你创建一个简单的django 应用
    该教程共包含两部分:
    1、一个面向用户的站点,用户可以查看调查列表,然后给它们投票
    2、一个管理站点,可以对调查列表进行增加,修改和删除
    在确认你已经安装好了django,你可以通过以下命令来输出你所安装的django的版本号:

    python -c "import django; print(django.get_version())"


    如果django没有安装好,就会报错“No module named django”。
    本教程是基于Django 1.6/Python 2.x来编写的,如果你所安装的django版本不是1.6,可以在当前页的右边的搜索框下的版本下拉列表中选择自己所安装的版本号,或者升级你的django到1.6版本(即最新版本)。如果你使用的是python3.x,你可能需要对代码做一些修改,所以使用该版本的前提是你知道如何用python3.x来实现本教程中用2.x实现的功能。

    一、创建一个django项目
    使用命令cd到你想要保存项目的目录下,然后运行以下命令,生成一个django项目

    django-admin.py startproject mysite


    以上命令会在当前目录下生成一个叫mysite的目录,没有成功请参照:https://docs.djangoproject.com/en/1.6/faq/troubleshooting/#troubleshooting-django-admin-py

    注意1:项目名称不要使用python的内建标识符或者Django的组建名称,这样会造成冲突;另外,处于安全考虑,不建议把django项目放在web服务器的根目录下(比如/var/www)。

    看看mysite项目下面的文件:

    mysite/
        manage.py
        mysite/
            __init__.py
            settings.py
            urls.py
            wsgi.py    


    注意2:如果你所创建的项目目录结构不是这样,可能是教程版本与你安装的版本不一致造成的
    这些文件分别是:
    mysite/ :项目名,你可以把它重命名成任意你喜欢的名字,参照注意1
    manage.py :一个命令行工具,用于与项目的交互。用法参照:https://docs.djangoproject.com/en/1.6/ref/django-admin/
    mysite/__init__.py:一个空文件,用于告诉python 解释器该文件所在目录是一个python包
    mysite/settings.py:用于项目的配置
    mysite/urls.py:用于url的地址映射以及管理URL的地址格式
    mysite/wsgi.py: 项目入口

    二、现在启动服务器.在项目的根目录mysite下,运行以下命令:

    python manage.py runserver

    你会看到一下输出:

    Validating models...
    
    0 errors found
    November 10, 2013 - 15:50:53
    Django version 1.6, using settings 'mysite.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CONTROL-C.

    以上信息说明你已经成功启动了django 开发服务器,一个轻量级的纯python服务器。使用该服务器可以快速部署我们的web应用.
    注意3:当项目或者应用真正部署的时候不要使用该服务器

    现在你在浏览器上访问http://127.0.0.1:8000/,就可以看到"Welcome to Django"的页面。
    现在你的应用成功创建了

    注意4:可以使用以下命令修改服务器端口和ip地址:

    python manage.py runserver 8080
    python manage.py runserver 0.0.0.0:8000


    这样你访问的 url就变成了:http://127.0.0.1:8080,http://0.0.0.0:8000
    不需要重启服务器,来更新代码

    三、设置
    1、数据库设置
    现在编辑mysite/settings.py.有点类似于yii框架中main全局配置文件
    数据库默认使用Sqlite.如果你对数据库比较陌生,或者你只对django感兴趣。那么这个默认配置就是你最简单易用的选择。sqlite是自包含在python中的,不需要你额外需要安装和配置。
    如果你想使用另外的数据库,需要修改settings.py中的DATABASES'default成你想要使用的数据库名称。django支持的数据库,引擎有:'django.db.backends.sqlite3', 'django.db.backends.postgresql_psycopg2', 'django.db.backends.mysql', or 'django.db.backends.oracle'. 等等
    如果你不是使用Sqlite作为你的数据库,那么还需要添加并设置USER/PASSWORD/HOST这些配置项,更多细节参照:https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-DATABASES

    2、时区设置
    把TIME_ZONE设置成你当前时区

    3、INSTALLED_APPS
    该配置项的值是一个元组,每个元素是在当前Django实例中激活的所有应用的名称。这些应用可以在被很多的项目使用,也可以打包然后在其他的项目中部署。
    默认情况下,django项目自动包含以下apps:
    django.contrib.admin---一个管理站点。这个将在第二部分的教程中用到
    django.contrib.auth---一个认证系统
    django.contrib.contenttypes---一个引入文档类型框架
    django.contrib.sessions---会话框架
    django.contrib.messages---消息框架
    django.contrib.staticfiles---管理静态文件的框架
    这些apps默认包含在新创键的项目中。以上这些应用会只用到数据库,所以需要在使用事前把需要用的数据表创建出来。创建命令如下:

    python manage.py syncdb


    syncdb命令是根据INSTALLED_APPS的配置项创建它们需要的数据表.创建数据表的时候,会提示创建一个超级用户,用于以后访问数据时的认证。

    4、创建模型
    现在项目已经创建并且设置好了,我们现在需要用它来做点其他的事情。
    django会自动生成每个应用的基础目录结构,这样就就可以专注与编程而不是创建应用的目录
    在项目的根目录下,使用以下目录创建应用:

    python manage.py startapp polls


    polls 应用的目录结构如下:

    polls/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py


    创建数据库应用的第一步是定义你的数据模型,实际上就是数据布局和一些额外的元数据
    模型是单一的,明确的数据源。它包含数据表中的所有字段和数据操作方法。django遵循DRY原则。我们的原则是一次定义,多次派生。

    在本教程中,我们创建两个模型:Poll,Choice.Poll是包含的数据域有“ 题”和”问题发布日,Choice也有两个数据域:一个选项文本,以及对应的得票总数。每一个Choice与Poll联合使用
    两个模型定义如下,并保存文件为Polls/models:

    from django.db import models
    
    class Poll(models.Model):
      question = models.CharField(max_length=200)
      pub_date = models.DateTimeField('date published')
    
    class Choice(models.Model):
      poll = models.ForeignKey(Poll)
      choice_text = models.CharField(max_length=200)
      votes = models.IntegerField(default=0)

    以上代码表示,每个模型就是一个django.db.models.Model子类,每个模型类都会有定义一些变量,这些变量就是上面提到的数据域,这些数据域代表着数据库表中的字段。这些变量名就是对应的数据表字段名。每个变量的值是django中Field类的实例。

    在创建Field实例中,可以第一个参数是可选的,通过指定第一个参数,可以使用可读性强的名称,在页面中表示一个数据域,比如上例中的pub_date数据域,在页面中的显示名称为"date published".创建某些Field实例时,必须设置某些参数,比如CharField,需要传递一个max_length参数。最后还需要注意,外键的定义ForeignKey,它告诉django每个Choice都有一个对应的Poll。django支持所有的数据映射关系类型:多对一,多对多,一对多,一对一。

    5、激活模型
    django根据所定义的模型类:1、创建相应的数据库表 2、创建一个数据库访问API用于访问1中创建的数据库表。
    前提是安装所创建的polls应用。编辑mysite/settings.py,在INSTALLED_APPS中添加polls即可安装应用
    然后使用以下命令来看看我们创建的数据库表:

    python manage.py sql polls


    你会看到类似于下面的输出:

    BEGIN;
    CREATE TABLE "polls_poll" (
    "id" integer NOT NULL PRIMARY KEY,
    "question" varchar(200) NOT NULL,
    "pub_date" datetime NOT NULL
    );
    CREATE TABLE "polls_choice" (
    "id" integer NOT NULL PRIMARY KEY,
    "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"),
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL
    );
    COMMIT;

    注意5:
    1、以上的命令输出依赖于你所使用的数据库类型,本例中为sqlite
    2、数据表名是由小写的app名和模型类名组成的
    3、主键id是自动添加的,你可以在模型类定义的时候,定义自己的主键来覆盖它
    4、外键的字段名会自动的添加”_外键名称“来表示本例中的外键名称为id,你也可以定义覆盖它
    5、外键的实现使用的语句是 REFERENCES
    6、上面输出的信息或者操作并没有真正的执行

    下面运行syncdb,在你的数据库中创建模型表

    python manage.py syncdb


    syncdb命令为INSTALLED_APPS中所有的app创建它们需要的数据表,而且该命令只会创建那些需要的但是不存在的数据表,也就是所已经存在的数据表不会被重复创建。

    6、使用数据模型API
    使用以下命令进入django的shell 交互模式:

    python manage.py shell

    在shell模式下,你可以查看你所创建的模型以及存储的数据是否成功等
    详情见(https://docs.djangoproject.com/en/1.6/intro/tutorial01/#playing-with-the-api)

    7、模型对象的可读性
    为每个模型对象添加__str__(__unicode__()),这样在打印显示一个模型对象的时候可读性更好

    添加的代码为:

    from django.db import models
    
    class Poll(models.Model):
      # ...
      def __unicode__(self): # Python 3: def __str__(self):
        return self.question
    
    class Choice(models.Model):
      # ...
      def __unicode__(self): # Python 3: def __str__(self):
      return self.choice_text
    
    现在添加一个自定义的方法:
    import datetime
    from django.utils import timezone
    # ...
    class Poll(models.Model):
      # ...
      def was_published_recently(self):
      return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
  • 相关阅读:
    excel
    AWS学习之EC2
    约瑟夫问题
    centos7 系統vps安裝mysql5.6及設置本地遠程連接筆記
    搜索框的测试checklist
    产品把整个项目组拉走去创业,这是什么神操作
    python基础-python函数参数为print语句时的输出
    python基础学习笔记-切片难点
    session 、cookie、token的区别(转)
    robot framework python3环境下学习笔记(1)——安装robot framework
  • 原文地址:https://www.cnblogs.com/chuan-joker/p/django_tutorials_1.html
Copyright © 2011-2022 走看看