Django框架结构图
安装Django
sudo apt-get install python-django -y
Django的简单配置
1.在根目录下创建一个项目:django-admin startproject django1
startproject创建的目录结构如下:
django1/
manage.py
django1/
__init__.py
settings.py
urls.py
wsgi.py
- 外层django1目录只是项目的一个容器,对于Django来说该目录名并不重要,可以重命名该文件夹
- manage.py:它是一个实用的命令行工具,使用它可以与该Django项目进行交互,可以在django-admin.py and manage.py中查看manage.py所有细节。
- 内层django1目录是项目中的实际Python包,该目录名就是Python包名,通过它可以导入里面的任何东西。(例如:import django1.settings)
- django1/__init__.py:一个空文件,告诉Python该目录是一个Python包
- django1/setting.py :该Django项目的设置、配置。
- django1/urls.py:该Django项目的URL声明,一份由Django驱动的网站“目录”
- django1/wsgi.py:一个WSGI兼容的Web服务器的入口,用于项目的运行
2.进入项目文件夹,创建一个应用:python manage.py startapp one
3.在项目的settings.py文件中添加刚刚建立的应用(为了使用render函数渲染模板,):
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'one',
)
模板的使用
1.url配置(更改url.py文件):
在url.py的patterns中添加类似
url(r'^one/','one.views.index')
的语句,引用界面在one文件夹下的views.py中的index视图函数
2.编写views.py文件的index函数,实现加载html文件(第一种写法):
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader,Context
def index(req):
test_html = loader.get_template('test.html')#搜索app中templates文件夹下的test.html文件,并生成模板对象
text = Context({})#生成模板参数对象
return HttpResponse(test_html.render(text))#模板对象通过render方法加入模板参数用HttpResponse返回浏览器
加载html文件(第二种写法):
from django.shortcuts import render,render_to_response
def index(req):
return render_to_response('test.html',{})#第一个为模板文件,第二个为模板参数
3.views变量(后台变量传递到前端显示),修改views.py:
class person():
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def say(self):
return self.name
def index(req):
user = {'name':'lizhong','age':'22','sex':'man'}
user2 = person('lz','23','man')
user3 = ['c','c++','python']
direc = {'title':'test','hone':'Test','li':user,'zhong':user2,'web':user3}
return render_to_response('test.html',direc)#template and parameter
Html文件中可以接收title这样的普通变量、字典、以及对象(函数返回值和属性)和列表,但最外层都需要被一个字典所包围,前后端通过该字典的key值做出匹配(优先级关系:变量>字典>对象属性>对象方法>列表),html代码如下:
<title>{{title}}</title>
</head>
<body>
<h>Hello World!!!</h>
<h1>{{hone}}</h1>
<h2>user:</h2>
<li>name:{{li.name}}</li>
<li>age:{{li.age}}</li>
<li>sex:{{li.sex}}</li>
<h2>user2:</h2>
<li>name:{{zhong.name}}</li>
<li>age:{{zhong.age}}</li>
<li>sex:{{zhong.sex}}</li>
<li>{{zhong.name}} say :I am {{zhong.say}}</li>
<h2>user3:</h2>
<li>lanuageone:{{web.0}}</li>
<li>lanuagetwo:{{web.1}}</li>
<li>lanuagethree:{{web.2}}</li>
</body>
4.标签(if else endif ,for endfor)的使用,views.py文件:
class person():
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
self.value = 1
def say(self):
return self.name
def index(req):
user = person('lizhong',22,'man')
direc = {'user2':user,'web':['python','c','c++']}
return render_to_response('tagtest.html',direc)
Html文件:
<body>
<h>Hello World!!!</h>
<h1>{{hone}}</h1>
<h2>user:</h2>
<li>name:{{li.name}}</li>
<li>age:{{li.age}}</li>
<li>sex:{{li.sex}}</li>
{% if user2.value == 1%}
user2:
name:{{user2.name}}
age:{{user2.age}}
sex:{{user2.sex}}
{{user2.name}} say :I am {{user2.say}}
{% else %}
{% endif %}
<h2>user3:</h2>
{% for i in web %}
{{forloop.counter}}.lanuage:{{i}} #(forloop.counter有好几种for方法,此方法可以输出序列)
{% endfor %}
</body>
在Django中操作MySQL数据库
1.在MySQL中创建DataBase
2.配置settings.py:
添加应用(INSTALLED_APPS),添加数据库(DataBases),安装south管理数据库
安装South:
sudo pip install South
把south加入到settings.py中的INSTALL_APPS中
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'one',
'south',
)
- 修改好后运行一次python manage.py syncdb
将之前建好的应用由South管理了,运行:
python manage.py convert_to_south one(app_name)
若该应用之前创建过相关的表,可以采用以下方法来“假装”用South创建的:
python manage.py migrate one(app_name) –fake
这个意思是,表我之前就建好了,现在只是用South记录下创建记录
- 之后当对one(aap_name).models做修改后,执行
python manage.py schemamigration one(app_name) --auto
再执行
python manage.py migrate
即可
3.编写app应用文件夹下的models.py文件
#models.py
from django.db import models
class Employ(models.Model):#Databases set in setting.py Employ is table, name is list,
name = models.CharField(max_length = 10, null = False ,blank = False)
age = models.PositiveSmallIntegerField(blank = False, null = False)
sex = models.CharField(max_length = 10, null = False, blank = False)
tel = models.CharField(max_length = 13, blank = False, null = False)
def __unicode__(self):
return self.name
最后附上Field常用字段及其选项
4.在Django上操作数据库
python manage.py shell#进入Django-shell中
from one.models import Employ
#创建
first_var = Employ.objects.create(name = 'cc', age = 24)
#查询
print Employ.objects.get(id = 1).name或first_var.name
print Employ.objects.get(id = 1).age或first_var.age
#创建
first_var = Employ()
first_var.name = "cc"
first_var.age = 23
first_var.save()
#查询
search_var = Employ.objects.all()
print search_var[0].name
print search_var[0].age
5.数据库到前端显示
search_var = Employ.objects.all()
return render_to_response('index.html',{'name':search_var[0].name,'age':search_var[0].age})
或者直接将数据库传递到前端,再通过前端模板标签进行处理
return render_to_response('index',{'person':search_var})