通过pip安装Django
pip install Django==1.9.1
注:pip的安装方法
下载pip包解压后在当前目录打开终端运行
python setup.py install
查看当前Django版本号
python (进入python交互界面)
import Django
django.VERSION 或者
print (django.VERSION) 或者
print (django.get_version()) 或者
django-admin--version 或者
python -c "import django; print(django.get_version())"
运行control+Z可以退出python交互界面
创建工程
使用 django-admin.py 来创建 website 项目:
django-admin startproject HelloWorld
工程目录说明
HelloWorld:项目的容器。
manage.py:一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
HelloWorld/__init__.py:一个空文件,告诉 Python 该目录是一个 Python 包。
HelloWorld/settings.py:该 Django 项目的设置/配置。
HelloWorld/urls.py:该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
HelloWorld/wsgi.py:一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
接下来我们进入 HelloWorld 目录输入以下命令
启动Django自带的开发服务器:
python manage.py runserver 0.0.0.0:8000
0.0.0.0让其它电脑可连接到开发服务器,8000为端口号。如果不说明,那么端口号默认为8000。
在命令行中输入control+c可以关闭Webserver
在对源代码进行修改时不需要先将webserver关闭,只需要在修改后再刷新页面即可
创建app(app为website的一部分功能块)
python manage.py startapp music (music为app的名字)
或
django-admin.py startapp music
修改settings.py文件中的Installed_Apps,添加‘music’,
注:在settings.py文件中还可修改数据库配置、所在时区以及字符编码Encode
Django视图和URL配置
在url.py中设置url到views.py文件中方法的映射
url(r'^music/index/$','music.views.index')
(注:参数一为一个正则表达式,参数二为处理方法,当URL的形式和正则表达式匹配时转向方法)
vim blog/views.py
from django.http import HttpResponse (注:django.http为模块名,HttpResponse为对象名)
def index(req):
return HttpResponse('
hello world
')
url配置的几种方式
1、正则表达式和方法匹配
urlpatterns = patterns('',
url(r'^music/index/$','music.views.index'),
)
2、导入html页面
from music.views import index
urlpatterns=patterns('',
url(r'^music/index/$',index),
)
3、urlpatterns = patterns('music.views',
url(r'^music/index/$','index'),
)
还可以在正则表达式中做一些变化
将url中的一部分作为参数传递
url.py文件中:
url(r'^music/index/(?P
\d{2})/$','index') 也可以不给参数取名字
url(r'^music/index/(\d{2})/$','index')
views.py文件中:
from django.shortcuts import render_to_response
def index(req,id):
return render_to_response('index.html',{'title':'my page','id':id})
index.html文件中:
{{title}} id:{{id}}
Django创建模板
在应用目录下创建一个templates目录(Django中使用模板文件的固定位置)
mkdir music/templates
将写好的index.html文件保存到templates目录下
在views.py文件中
from django.http import HttpResponse
from django.template import loader
from django.template import Context
‘’‘
def index(req):
t=loader.get_template('index.html')
#创建template对象将对应的文件导入进来,会自动到应用下templates目录下寻找文件
c=Context({})
#Context对象用来存放要向模板存入的数据(本例中没有数据,为空)
return HttpResponse(t.render(c))
#HttpResponse对象返回(模板对象调用它的渲染方法render将Context对象渲染)后的结果
’‘’
改进模板使用方式
from django.shortcuts import render_to_response #render为递交的意思
def index(req):
return render_to_response('index.html',{})
#参数一为html页面模板文件,参数二为要传给html页面的数据
Django模板变量
如何在视图中把数据动态地传递到模板文件(html文件)中去
模板变量(由两个大括号组成,里边放入变量名)
{{title}} hello {{user}}
def index(req):
return render_to_response('index.html',{‘title':'my page','user':'tom'})
#参数一为模板文件,参数二为传递的数据(以字典的形式)
传递字典和列表
def index(req):
user = {'name':'tom','age':23,'sex':'male'}
book_list = ['python','java','php','web'] #列表,list
return render_to_response('index.html',{‘title':'my page','user':user,'book_list':booklist})
hello {{user.name}}
age:{{user.age}} sex:{{user.sex}}
{{book_list.0}} {{book_list.1}} {{book_list.2}} {{book_list.3}}
传递对象
class Person(object):
def _init_(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def index(req):
user = Person('tom',23,'male')
return render_to_response('index.html',{'title':'my page','user':user})
#现在传递的user为一个对象
HTML文件中的写法不变,同上
hello {{user.name}}
age: {{user.age}} sex: {{user.sex}}
可以传递的数据类型有:基本数据类型、 字典、对象、列表
.引用的优先级关系:字典—>对象的属性—>对象的方法—>列表
可以通过键、属性名、索引获取分量或属性
传递对象时执行其中的方法
class Person(object):
def _init_(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def say(self):
return "I am "+self.name
def index(req):
user = Person('max',33,'male')
return render_to_response('index.html',{'title':'my page','user':user})
html中的写法
{{user.name}} says:"{{user.say}}"
Django模板标签
{% if user %}
name: {{user.name}} {% else %}
用户不存在
{% endif %}
{% for book in book_list %}
{{book}} {% endfor %}
{% for k,v in user.items %} #k获取user字典中的key,v获取user字典中的value
{{k}}:{{v}} {% endfor %}
更多模板标签的使用参考Django手册
Django模板使用流程
运行python manage.py shell,然后输入以下代码:
from django.shortcuts import render_to_response
render_to_response('index.html',{'uname':‘allen‘})
输出:
说明render_to_response最终返回的是一个HttpResponse对象
Django模型
Django对数据库的操作
前期准备
安装配置MySQL
启动mysql server
sudo mysqld_safe
连接数据库服务器
mysql -u root -p
#输入mysql账号密码
退出数据库
control+c 或者 exit 回车
由于MySqlDB官网只支持Python3.4,这里Python3.5使用第三方库PyMysql连接Mysql数据库
pip install pymysql #安装pymysql
python3 #进入python3.5
import pymysql #引出pymysql模块
control+Z #退出python3.5
退出mysql server
mysqladmin - root -p shutdown
#输入mysql账号密码
在Django中通过pymysql使用MySQL数据库
大体步骤
1、启动mysql server
2、连接mysql server
3、创建数据库
mysql> create database 数据库名 default charset=utf8;
3、在settings.py 中配置
4、在settings.py中配置mysql
mysql的配置如下:
DATABASES = {'default': {'ENGINE':'django.db.backends.mysql','NAME':'mydatabase','USER':'mydatabaseuser','PASSWORD':'mypassword','HOST':'127.0.0.1','PORT':'3306',}}
mysql的端口号是3306
使用mysql的时候会报错:no moudle named "MySQLdb",这是因为我们没有安装这个包
sudo apt-getinstallpython-devpipinstallMySQL-python
注:MySqldb官网只支持Python3.4,Python3.5使用第三方库PyMysql连接Mysql数据库
5.创建数据模型
模型其实就是一个python类,使用java开发就是java类etc。模型的存放地点是我们的应用的models.py文件中。每个模型都要继承models.Model类
classCategory(models.Model):name=models.CharField(max_lenth=128,unique=True)def__unicode__(self):returnself.nameclassPage(models.Model): category=models.ForeignKey(Category) title=models.CharField(max_lenth=128) url=models.URLField() views=models.IntegerField(defautl=0)def__unicode__(self):returnself.title
第二个类中的foreignKey字段包含了category,说明category是外键。有个奇怪的地方,当我们设计数据库表的时候,隐含的表明我们必须设计一个与数据不相关的ID字段,通常设为自增长,作为我们的主键。可是这里却没有,别慌,django十分善意,已经自动给我们设计了一个自动增长的id字段。
4.数据库迁移
当我们修改了模型的字段,往往意味着数据库中的表字段也要改变,这时候就需要用到数据库迁移了。django1.7以上版本提供了一个数据库迁移的工具。
执行命令:
pythonmanage.pymakemigrations
pythonmanage.pymigrate
每当我们对模型进行了修改或者是添加新的模型,都需要通过 _python manage.py makemigrations_命令进行注册
但是光是注册还不能真正将修改应用到数据库中,需要_python manage.py migrate_命令在数据库中修改表字段或新建表。