一、Django的安装、工程建立
1. 用豆瓣的源安装django
pip install django - i http://pypi.douban.com/simple
2. 把django-admin.py的路径“;C:Python27Libsite-packagesdjangoin”加入环境变量。
3. django-admin.py startproject mysite #建立工程
4. django-admin.py startapp blog #进入mysite目录建立应用
5. 修改对应mysite下settings.py中install_apps值,加入应用名称
6. 在mysite下urls.py中修改访问地址对应函数名称。
url(r'^blog/index/$','blog.views.index' ),
url(r'^blog/index1/$','blog.views.index1' ),
url(r'^blog/index2/$','blog.views.index2' ),
7. 在应用blog下建立templetes目录,加入index.html文件
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Hello world!</title>
</head>
<body>
<li>{{ name }}</li>
{{ list }}
{% for i in list %}
<li>{{ i }}</li>
{% endfor %}
</body>
</html>
8. 修改blog目录下views.py中的访问函数
from django.http import HttpResponse
from django.template import loader, Context, Template
from django.shortcuts import render_to_response
def index(req):
t = loader.get_template('index.html')
c = Context({'name':'Yang'})
return HttpResponse(t.render(c))
def index1(req):
t = Template('<h1>hello {{name}} </h1>')
c = Context({'name':'Zhu'})
return HttpResponse(t.render(c))
def index2(req):
lst1 = [1, 2, 3, 4, 5]
return render_to_response('index.html', {'name':'Ying', 'list':lst1})
二、WIN7安装MYSQL及mysql-python
1. 从http://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.6.22.0.msi 下载WIN7的MYSQL进行安装。
常用命令 show databases; use csvt; show tables; desc blog_employee;
2. https://pypi.python.org/pypi/MySQL-python/1.2.5 下载安装PYTHON和MYSQL的数据库接口文件MySQL-python 1.2.5。
3. 修改settings.py中的数据库配置。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'csvt',
'USER': 'root',
'PASSWORD': 'syss',
'HOST': '',
'PORT': '',
}
}
4. 修改blog目录下models.py文件,增加类,python会根据类在数据库建表。
from django.db import models
class Employee(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
5. 同步数据库Django会自动根据建立的类生成数据库表。
python manage.py syncdb ,如果是django1.7,可能需要先执行python manage.py makemigrations,python manage.py migrate先做迁移。
6. 修改urls中的访问路径和blog目录下views.py的访问函数。
url(r'^index/$', 'blog.views.index3')
def index3(req):
emps = Employee.objects.all()
return render_to_response('index.html', {'emps':emps})
7. 修改templates下index.html文件
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Hello world!</title>
</head>
<body>
<li>{{ name }}</li>
{{ list }}
{% for i in list %}
<li>{{ i }}</li>
{% endfor %}
{% for emp in emps %}
<div>{{ forloop.counter }} {{ emp }}</div>
{% endfor %}
</body>
</html>
三、Centos7安装MYSQL及mysql-python
1. 安装MYSQL
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server
2. 成功安装之后重启mysql服务
# service mysqld restart
3. 初次安装mysql是root账户是没有密码的
4. 设置密码的方法
# mysql -uroot
mysql> set password for ‘root’@‘localhost’ = password('mypasswd');
mysql> exit
4. 安装Mysql-python
pip install mysql-python 安装python环境,pip install mysql-python 安装mysql环境,不然安装mysql-python会报错
pip install mysql-python 安装python和mysql接口
import MySQLdb 成功,表示Python操作mysql成功
四、通过数据库模型,使用和管理数据库
1. 在csvt01csvt01urls.py中增加访问地址, url(r'^blog/article/$', 'blog.views.article')。
2.在应用目录csvt01logmodels.py增加数据模型。
class Article(models.Model):
name = models.CharField(max_length=50)
date = models.DateField()
number = models.IntegerField()
text = models.CharField(max_length=500)
def __unicode__(self): #对应显示为name
return self.name
3. 在应用目录csvt01logviews.py中增加访问地址对应的处理函数。
from blog.models import Article
from django.shortcuts import render_to_response
def article(req):
arc = Article.objects.all()
return render_to_response('show_article.html', {'articles':arc})
4. 在应用下模板目录下增加对应模板文件csvt01log emplatesshow_article.html。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
{{ articles }}
{% for article in articles %}
<li>{{ article.name}} {{ article.number }} {{ article.date }} {{ article.text }}</li>
{% endfor %}
</body>
</html>
5. 在命令行执行数据库迁移同步,会自动在数据库建立blog_article数据表。
python manage.py makemigrations
python manage.py migrate
6. 在命令行执行python manage.py shell,进入交互命令行界面增加实例数据。
from blog.models import Article
a1 = Article()
a1.name = 'Yang'
a1.number = 23
a1.text = 'If you want to go, then go !'
a1.date ='2014-01-07'
a1.save()
7. 在csvt01logadmin.py中增加以下配置,在后台管理界面管理数据库表。
from blog.models import Article
admin.site.register(Article)
8. python manage.py runserver启动服务器,在浏览器中访问http://127.0.0.1:8000/blog/article/
五、注册用户数据保存到数据库并上传文件到服务器
1. 建立工程、增加blog应用
django-admin.py startproject csvt09
cd csvt09
manage.py startapp blog
在Mysql增加对应数据库create database csvt09;
2. 在D:csvt09csvt09settings.py中修改对应配置文件。
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'csvt09',
'USER': 'root',
'PASSWORD': 'syss',
}
}
禁用#'django.middleware.csrf.CsrfViewMiddleware',
3. 修改访问路径文件D:csvt09csvt09urls.py,增加url(r'^blog/$', 'blog.views.register')
4. 在D:csvt09logmodels.py中增加保存到数据库的数据模型。
from django.db import models
class User(models.Model):
username = models.CharField(max_length=30)
headImg = models.FileField(upload_to='./upload')
def __unicode(self):
return self.username
5. 在D:csvt09logviews.py中增加对应处理函数
from django.shortcuts import render_to_response
from django import forms
from django.http import HttpResponse
from blog.models import User
class UserForm(forms.Form):
username = forms.CharField()
headImg = forms.FileField()
def register(req):
if req.method == "POST":
uf = UserForm(req.POST, req.FILES)
if uf.is_valid():
username = uf.cleaned_data['username']
headImg = uf.cleaned_data['headImg']
print username, headImg
user = User()
user.username = username
user.headImg = headImg
user.save()
return HttpResponse('ok')
else:
print 'false'
else:
uf = UserForm()
return render_to_response('register.html', {'uf':uf})
6. 在D:csvt09log emplates
egister.html中,增加模板文件内容。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>test</h1>
<form method="post" enctype="multipart/form-data">
{{ uf.as_p }}
<input type="submit" value="ok">
</form>
</body>
</html>
7. 在命令行执行数据库迁移同步,会自动在数据库建立blog_article数据表。
python manage.py makemigrations
python manage.py migrate
python mange.py syncdb
六、使用cookie注册、登录表单页面
1. 建立工程、增加blog应用
django-admin.py startproject web
cd web
manage.py startapp blog
在Mysql增加对应数据库create database web;
2. 在D:webwebsettings.py中修改对应配置文件。
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'web',
'USER': 'root',
'PASSWORD': 'syss',
}
}
禁用#'django.middleware.csrf.CsrfViewMiddleware',
3. 修改访问路径文件D:webweburls.py,增加url处理。
url(r'^register/$', 'blog.views.register'),
url(r'^login/$', 'blog.views.login'),
url(r'^index/$', 'blog.views.index'),
url(r'^logout/$', 'blog.views.logout'),
4. 在D:weblogmodels.py中增加保存到数据库的数据模型。
from django.db import models
class User(models.Model):
name = models.CharField(max_length=30)
password = models.CharField(max_length=30)
def __unicode__(self):
return self.name
5. 在D:weblogviews.py中增加对应处理函数
from django.shortcuts import render
from django.http import HttpResponseRedirect, HttpResponse
from django import forms
from django.shortcuts import render_to_response
from blog.models import User
class UserForm(forms.Form):
name = forms.CharField(max_length=30)
password = forms.CharField(max_length=20)
def register(req):
if req.method == 'POST':
uf = UserForm(req.POST)
if uf.is_valid():
name = uf.cleaned_data['name']
password = uf.cleaned_data['password']
User.objects.create(name=name, password=password) #保存表单内容到数据库
return HttpResponseRedirect('/login/')
else:
uf = UserForm()
return render_to_response('register.html', {'uf':uf})
#__exact是数据库精确寻找,相当于=
def login(req):
if req.method == 'POST':
uf = UserForm(req.POST)
if uf.is_valid():
name = uf.cleaned_data['name']
password = uf.cleaned_data['password']
user = User.objects.filter(name__exact=name, password__exact=password)
if user:
response = HttpResponseRedirect('/index/')
response.set_cookie('name', name, 3600)
return response
else:
return HttpResponseRedirect('/login/')
else:
uf = UserForm()
return render_to_response('login.html', {'uf':uf})
def index(req):
name = req.COOKIES.get('name')
return render_to_response('index.html', {'name':name})
def logout(req):
response = HttpResponse('logout')
response.delete_cookie('name')
return response
6. 在D:weblog emplates
egister.html中,增加模板文件内容。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form method="post">
{{ uf.as_p }}
<input type="submit" value="ok">
</form>
</body>
</html>
7. 在D:weblog emplateslogin.html中,增加模板文件内容。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form method="post">
{{ uf.as_p }}
<input type="submit" value="ok">
</form>
</body>
</html>
8. 在D:weblog emplatesindex.html中,增加模板文件内容。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h2> Welcome {{ name }} </h2>
<a href="/logout/">logout</a>
</body>
</html>
9. 在命令行执行数据库迁移同步,会自动在数据库建立blog_article数据表。
python manage.py makemigrations
python manage.py migrate
python mange.py syncdb