Django的使用
Django使用介绍
1、MTV
Django中的MTV分别表示models、templates和views。
models文件主要定义数据库的连接。
templates文件可以放一些html的模版。
views文件主要定义处理请求的函数。
2、安装django(pip安装方式)
安装pip
tar zxvf pip-8.1.2.tar.gz cd pip-8.1.2 python setup.py install
pip安装完成后,可以直接用来安装jdango
pip install django
验证是否安装成功,(python中导入django模块,若没提示错误,即表示安装成功)
>>> import django
>>>
3、创建应用
创建一个项目
django-admin startproject sites
该项目的结构为
|____sites | |______init__.py | |____settings.py | |____urls.py | |____wsgi.py |____manage.py
在该项目中创建一个应用
django-admin startapp mysite
该应用目录的结构为
|______init__.py |____admin.py |____apps.py |____migrations | |______init__.py |____models.py |____tests.py |____views.py
应用已经创建完毕,现在写一个简单的http请求:
- 1、在views中定义处理请求的函数
-
from django.shortcuts import HttpResponse def index(request): return HttpResponse('ok')
- 2、在urls中映射url和对应的处理函数
-
from mysite import views urlpatterns = [ url(r'^index/', views.index), ]
- 3、启动web端
-
python manage.py runserver
服务端默认会监听8000端口,通过浏览器请求 http://localhost:8000/index即可获得'ok'字符串。
4、Django中的路由
路由即将不同url的请求转发给处理该请求的函数,Django中的路由表定义在urls文件中。
- 动态url
urls文件的配置
url中支持正则,(\d+)表示获取匹配到的数字。
urlpatterns = [ url(r'^index/(\d+)/(\d+)',views.index), ]
- 变量付值
(?P<n1>\d+)表示将匹配到的值(数字)付给形参n1,然后获取n1的值。
urlpatterns = [ url(r'^index/(?P<n2>\d+)/(?P<n1>\d+)',views.index), ]
view文件的配置
def index(request,n1,n2): n = n1+n2 return HttpResponse(n)
- 二级路由(将请求转发到其它app中)
请求到达project中的urls文件后进行转发,转发至其它app下的urls文件中。
project中urls文件配置
from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^test1/',include('test1.urls')), #请求test1时,转发到test1下面的url url(r'^test2/',include('test2.urls')), ]
test1中url文件的配置
from django.conf.urls import url,include from django.contrib import admin from test1 import views urlpatterns = [ url(r'^home/',views.home), #进行二级匹配,将test1/home的请求转发给home函数处理 ]
test1中views文件的配置
from django.shortcuts import render from django.shortcuts import HttpResponse # Create your views here.
def home(request): return HttpResponse('test1.home')
test2中urls文件的配置
from django.conf.urls import url,include from django.contrib import admin from test2 import views urlpatterns = [ url(r'^home/',views.home), ]
test2中views文件的配置
from django.shortcuts import render from django.shortcuts import HttpResponse # Create your views here. def home(request): return HttpResponse('test2.home')
5、数据库操作
- 数据库创建
Django中数据库的配置文件为settings,默认的数据库引擎为 sqlite3。
Django中是在models文件中创建数据库,通过类创建数据库。创建数据库之前,需要在settings文件中注册一下app。
如下:
settings.py中注册test1
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'test1' ]
models.py中使用类创建数据库
from django.db import models # Create your models here. class UserInfo(models.Model): username=models.CharField(max_length=32) password=models.CharField(max_length=32) age=models.IntegerField()
生成创建数据库的配置文件
python manage.py makemigrations
此时在test1目录下会生成一个0001_initial.py 生成数据库的配置文件
根据生成的配置文件创建数据库
python manage.py migrate
这样,就创建好了数据库。
- 数据库增、删、改、查
1、插入数据
test1-views.py文件定义插入数据的函数
from django.shortcuts import render from django.shortcuts import HttpResponse from test1 import models # Create your views here. def db_handle(request): models.UserInfo.objects.create(username='ahaii',password='123456',age=20)
return HttpResponse('ok')
也可以将要插入的数据放到字典中
from django.shortcuts import render from django.shortcuts import HttpResponse from test1 import models # Create your views here. def db_handle(request): dic={'username':'ahaii','password':'123456','age':20} models.UserInfo.objects.create(**dic) return HttpResponse('ok')
test1-urls.py文件定义请求的url
from django.conf.urls import url,include from django.contrib import admin from test1 import views urlpatterns = [ url(r'^db/',views.db_handle), ]
浏览器请求http://localhost:8000/test1/db/时,就会执行views中的db_handle函数,即插入数据。
2、删除数据
views.py文件
删除username为ahaii的用户信息
def db_handle(request): models.UserInfo.objects.filter(username='ahaii').delete() return HttpResponse('ok')
3、修改数据
views.py文件
把所有age值改为23
def db_handle(request): models.UserInfo.objects.all().update(age=23) return HttpResponse('ok')
4、查找数据
views.py文件
def db_handle(request): models.UserInfo.objects.filter(username='ahaii') models.UserInfo.objects.filter(age=23).first() #查找所有age=23中的第一个 return HttpResponse('ok')
一个 UserInfo对象即为数据库中的一条数据。
6、将后台数据展示在前端页面上
views.py文件
def db_handle(request): obj=models.UserInfo.objects.all() #查询的所有数据,每个obj是数据库中的一条数据 return render(request,'1.html',{'li':obj}) #返回一个html,并将html中的变量使li替换
在project中创建模版目录templates,并在template中创建1.html文件
1.html文件
</head> <body> <table border="1px"> <thead> #设置表头部 <tr> <th>用户名</th> <th>密码</th> <th>年龄</th> </tr> </thead> <tbody> {% for item in li %} #li中包含username、password和age <tr> <td>{{item.username}}</td> <td>{{item.password}}</td> <td>{{item.age}}</td> </tr> {% endfor %} </tbody> </table> </body>
修改settings.py文件,设置存放模版位置'DIRS':(),'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR,'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
7、静态文件设置
修改settings.py,添加如下
STATICFILES_DIR=(os.path.join(BASE_DIR,'templates'), )
8、通过前端页面添加数据并显示
post 提交数据,get获取数据。
若为post方式提交数据,需要修改settings.py文件,将 'django.middleware.csrf.CsrfViewMiddleware', 一行注释掉。
MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', #'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
views.py文件
def db_handle(request): if request.method=='POST': #先判断请求的方法 models.UserInfo.objects.create(username=request.POST['username'], #requrst.POST为提交的数据,插入数据库 password=request.POST['password'], age=request.POST['age']) obj=models.UserInfo.objects.all() #获取数据库中的数据 return render(request,'1.html',{'li':obj})
1.html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="test1/db_handle/" method="post"> <p><input type="text" name="username"></p> <p><input type="text" name="password"></p> <p><input type="text" name="age"></p> <p> <input type="submit" value="提交"></p> </form> <table border="1px"> <thead> <tr> <th>用户名</th> <th>密码</th> <th>年龄</th> </tr> </thead> <tbody> {% for item in li %} <tr> <td>{{item.username}}</td> <td>{{item.password}}</td> <td>{{item.age}}</td> </tr> {% endfor %} </tbody> </table> </body> </html>