文章目录
项目要使用做一个简单的页面,发布环境已经有了一个页面系统,采用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检测是否安装成功:
通过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来检测是否安装成功:
三、新建简单实例
3.1、新建工程
安装好环境,下面就需要新建工程了。首先进入工作目录,利用以下命令新建工程:
django-admin.py startproject xxx # django-admin.py startproject evanxia ls # 可以看到evanxia工程
可以查看工程目录如下:
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
同样查看一下目录结构,如下:
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
可以进入mysql查看数据库表格,具体表格是根据工程的配置配置来确定的,可以自行设置。
发现没有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/
3、打开浏览器访问:http://evanxia.com:8000/admin/tjs/5
四、补充
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