一、Django的安装、工程建立 1. 用豆瓣的源安装django pip install django - i http://pypi.douban.com/simple 2. 把django-admin.py的路径“;C:\Python27\Lib\site-packages\django\bin\”加入环境变量。 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. 在csvt01\csvt01\urls.py中增加访问地址, url(r'^blog/article/$', 'blog.views.article')。 2.在应用目录csvt01\blog\models.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. 在应用目录csvt01\blog\views.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. 在应用下模板目录下增加对应模板文件csvt01\blog\templates\show_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. 在csvt01\blog\admin.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:\csvt09\csvt09\settings.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:\csvt09\csvt09\urls.py,增加url(r'^blog/$', 'blog.views.register') 4. 在D:\csvt09\blog\models.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:\csvt09\blog\views.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:\csvt09\blog\templates\register.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:\web\web\settings.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:\web\web\urls.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:\web\blog\models.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:\web\blog\views.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:\web\blog\templates\register.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:\web\blog\templates\login.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:\web\blog\templates\index.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