【总结】Django实例安装入门

Posted on Posted in 计算机1,422 views

    项目要使用做一个简单的页面,发布环境已经有了一个页面系统,采用Python的Django开发,为了了解一下Django的流程,自己查阅资料参考文档在自己的测试机上面做了一遍,整个过程简单记录如下。其实对于现在的网站架构来讲思想基本差不多,类似与PHP的Symfony框架。

一、基本环境

    服务器:阿里云服务器,1G内存,1M带宽

    OS:Ubuntu 14.4 64bit

    Python:2.7.6

    Django:1.9.7

    Mysql:5.5.44

二、安装配置

2.1、Python安装

    可以使用python –version来查看python版本,因为服务器已经默认安装python,所以不用再安装。更新源后,直接使用以下命令安装:

sudo apt-get update
sudo apt-get install python

2.2、pip安装

    pip是一个python软件包管理工具,通过以下命令来安装:

sudo apt-get install python-pip

2.3、Django安装

    Django需要使用pip来安装,通过一下命令来安装。具体可以参考:https://www.djangoproject.com/download/

sudo pip install Django==1.9.7

    其中:1.9.7是Django的版本。可以进入python检测是否安装成功:

QQ截图20160706192432.png

    通过find命令可以找到django-admin.py的位置如下:

/usr/local/bin/django-admin.py
/usr/local/lib/python2.7/dist-packages/django/bin/django-admin.py

2.4、安装Mysql

    如果以mysql作为数据库,可以通过apt-get直接安装。因为服务器之前已经安装了mysql,就没有操作。

sudo apt-get install mysql-server
mysql --version
# mysql  Ver 14.14 Distrib 5.5.44, for debian-linux-gnu (x86_64) using readline 6.3

2.5、python-mysqldb安装

    如果使用mysql作为网页的存储,仅仅安装mysql是不够的,需要安装python-mysqldb和mysql-python模块。分别用apt-get和pip即可直接安装

sudo apt-get build-dep python-mysqldb
sudo pip install MySQL-python

    同样可以使用python来检测是否安装成功:

QQ截图20160706194321.png

三、新建简单实例

3.1、新建工程

    安装好环境,下面就需要新建工程了。首先进入工作目录,利用以下命令新建工程:

django-admin.py startproject xxx
# django-admin.py startproject evanxia

ls
# 可以看到evanxia工程

    可以查看工程目录如下:

QQ截图20160706195338.png

3.2、数据库新建及配置

    直接进入evanxia/evanxia目录下,编辑setting.py文件:

74 # Database
75 # https://docs.djangoproject.com/en/1.9/ref/settings/#databases
76
77 DATABASES = {
78     'default': {
79         'ENGINE': 'django.db.backends.sqlite3',
80         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
81     }
82 }
###################################修改为##################################
74 # Database
75 # https://docs.djangoproject.com/en/1.9/ref/settings/#databases
76 DATABASES = {
77     'default': {
78         'ENGINE': 'django.db.backends.mysql',   # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
79         'NAME': 'evanxia',                      # Or path to database file if using sqlite3.
80         'USER': 'username',
81         'PASSWORD': 'password',
82         'HOST': '127.0.0.1',                    # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
83         'PORT': '3306',                         # Set to empty string for default.
84     }
85 }

    补充,也可以在程序中指定数据库,具体方式没有实践。具体python操作数据库,可以参考:http://www.cnblogs.com/fnng/p/3565912.html

    配置完数据库,就需要在mysql中新建相应的数据库:

mysql -uroot -p
mysql> CREATE DATABASE `evanxia` DEFAULT CHARACTER SET utf8 ;

    

3.3、新建应用

    上面新建evanxia工程,接下来需要新建应用app来实现具体业务。在工程主目录下,通过以下命令来实现:

python manage.py startapp yyy
# python manage.py startapp xia

    同样查看一下目录结构,如下:

QQ截图20160706201232.png

3.4、配置应用

    同3.2直接进入evanxia/evanxia目录下,编辑setting.py文件:

31 # Application definition
32
33 INSTALLED_APPS = [
34     'django.contrib.admin',
35     'django.contrib.auth',
36     'django.contrib.contenttypes',
37     'django.contrib.sessions',
38     'django.contrib.messages',
39     'django.contrib.staticfiles',
40     'xia', # 添加新建的应用
41 ]

3.3、Model

    进入应用xia目录,编辑models.py来新进自己的模型:

from __future__ import unicode_literals

from django.db import models

# Create your models here.

class First(models.Model):
    """docstring for Test"""
    tid = models.IntegerField()
    tname = models.CharField(max_length=128)
    ttype = models.CharField(max_length=32)
    def __str__(self):
        return "id = %d, name = %s, type = %s" % (self.tid, self.tname, self.ttype)

3.4、同步数据库

    目前在models中定义了自己的模型First极其结构,可以通过一下命令来同步到数据库,注意要进入到工程的主目录下。

# 不同Django使用的命令不一样,具体可以通过help命令查看
python manage.py migrate

QQ截图20160706203034.png

    可以进入mysql查看数据库表格,具体表格是根据工程的配置配置来确定的,可以自行设置。

QQ截图20160706203439.png   QQ截图20160706214421.png

    发现没有first表格(上左图),可以通过一下命令更新,然后再执行上述命令:

python manage.py makemigrations
python manage.py migrate

    这样就正常了(上右图),现在可以向数据库插入测试数据。

3.4、Controller

    1、进入evanxia/evanxia目录,编辑urls.py文件来设定路由:

"""evanxia URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.9/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^admin/tjs/$', 'xia.views.index'),            # 新添加
    url(r'^admin/tjs/(?P<t_id>\d+)/$', 'xia.views.detail'),    # 新添加
]

    2、进入应用xia的目录,编辑views.py来新进自己的视图:

from django.shortcuts import render
from django.shortcuts import render_to_response
from django.shortcuts import get_object_or_404
from xia.models import First
# Create your views here.
def index(request):
    object_list = First.objects.order_by('-id')[:10]
    return render_to_response('st/tjs_list.html',
                              {'object_list': object_list})

def detail(request, t_id):
    test = get_object_or_404(First, pk=t_id)
    return render_to_response('st/tjs_detail.html',
                              {'object': test})

3.5、Views

    1、进入应用xia的目录,新建templates目录;

   2、在 settings.py 中添加一个 templates 目录

 56 TEMPLATES = [
 57     {
 58         'BACKEND': 'django.template.backends.django.DjangoTemplates',
 59         'DIRS': ['/home/xiaoxia/web/www/django/evanxia/xia/templates'],    # 新添加,templates的绝对目录
 60         'APP_DIRS': True,
 61         'OPTIONS': {
 62             'context_processors': [
 63                 'django.template.context_processors.debug',
 64                 'django.template.context_processors.request',
 65                 'django.contrib.auth.context_processors.auth',
 66                 'django.contrib.messages.context_processors.messages',
 67             ],
 68         },
 69     },
 70 ]

    3、新建页面,进入templates目录,新建base.html、st/base.html、st/tjs_detail.html、st/tjs_list.html文件如下:

    A、base.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>Company Site: {% block title %}Page{% endblock %}</title>
    {% block extrahead %}{% endblock %}
  </head>
  <body>
    {% block content %}{% endblock %}
  </body>
</html>

    B、st/base.html

{% extends "base.html" %}

{% block extrahead %}
    <style>
        body {
            font-style: arial;
        }
        h1 {
            text-align: center;
        }
        .job .title {
            font-size: 120%;
            font-weight: bold;
        }
        .job .posted {
            font-style: italic;
        }
    </style>
{% endblock %}

    C、st/tjs_detail.html

{% extends "st/base.html" %}

{% block title %}statistics Detail{% endblock %}

{% block content %}
    <h1>statistics Detail</h1>

    <div class="job">
        <div class="title">
            {{ object.tid }}
            -
            {{ object.tname }}
        </div>
        <div class="description">
            {{ object.ttype }}
        </div>
    </div>
{% endblock %}

    D、st/tjs_list.html

{% extends "st/base.html" %}

{% block title %}statistics List{% endblock %}

{% block content %}
    <h1>statistics List</h1>
    <ul>
    {% for statistics in object_list %}
       <p> {{ statistics.tid }} - {{statistics.tname}} - {{statistics.ttype}}</p>
    {% endfor %}
    </ul>
{% endblock %}

3.5、发布

    1、进入工程主目录,运行以下命令发布:

python manage.py runserver evanxia.com:8000

    2、打开浏览器访问:http://evanxia.com:8000/admin/tjs/

QQ截图20160706215359.png

    3、打开浏览器访问:http://evanxia.com:8000/admin/tjs/5

QQ截图20160706215921.png

四、补充

4.1、修改Django初始密码

    1、在工程主目录文件夹下进入shell

python manage.py shell

    2、对admin用户进行修改密码

from django.contrib.auth.models import User  
user =User.objects.get(username='admin')  
user.set_password('new_password')  
user.save()

4.2、概念补充

    1、

4.2、数据库函数

    1、delete()

    2、save()

    3、XXX.objects.all()
    4、XXX(tid=2,ttype='a')

五、参考:

1、https://www.ibm.com/developerworks/cn/linux/l-django/#ibm-pcon

2、https://docs.djangoproject.com/en/1.9/ref/databases/

3、https://www.djangoproject.com/download/

4、http://www.hubwiz.com/course/562efe441bc20c980538e801/

5、http://www.cnblogs.com/wendoudou/p/mysql.html

6、http://www.cnblogs.com/xiami303/p/3248179.html

7、http://python.usyiyi.cn/django/topics/auth/default.html

8、https://www.gitbook.com/book/andrew-liu/django-blog/details


转载标明出处:https://blog.evanxia.com/2016/07/762