1.Django各模块作用
main.py
用于存放功能类函数
urls.py作为路由,分发功能用,根据路径名,调用相应的视图函数。
views.py
保存视图函数
models.py
负责在数据库创建表格,添加字段名称
templates文件夹
放置html文件
static文件夹
放置静态文件
2.Django实战项目过程
2.1配置路由urls
(1)首先创建一个app。进入Terminal。
输入创建app的代码命令,如下
misterwu为创建的app的名字,注意更改自己想要的名称
python manage.py startapp misterwu
然后会出现一个misterwu文件。
然后到主文件下的settings.py中找到INSTALLED_APPS下添加app。
在主文件下的urls.py中添加以下代码。
在misterwu文件夹下新建一个urls.py文件。
在这个urls.py中写以下代码
2.2展示html页面
在mistrrwu文件夹下的urls.py中继续书写代码,如下
此处会出现报红,因为我们还没创建 home方法,接下来创建。
在views.py中建立一个home方法
然后在misterwu下新建一个templates文件夹,然后再新建一个home.html.
在home.html中写入想要展示的东西。
例如:
然后在Terminal中执行如下代码
python manage.py runserver 127.0.0.1:8000
然后点击出现的网址
接着就可以在网页中看见自己想要展示的东西了。
显示页面的整个过程是,点击这个网址,会先访问主文件下的urls.py,然后根据写入的路径跳转到misterwu下的urls.py,然后根据现在请求的路径地址,会调用views下的home方法,进入到views.py下,然后利用home方法展示我们的web页面。
2.3创建公共html模板
选择html4或html5中文文档,进入之后,点击中文文档,一直下滑,找到入门模板并复制
然后将复制的模板用于自己html中
2.4展示导航信息
还是进入刚刚的中文文档里面,点击组件里面的导航,及Navbar,然后进行复制案例,运用到自己的html网页中。
2.5接口介绍
接口是用来向html传送数据的,可以从网上直接搜索可用的接口,如github的一个接口,如下:
里面直接有存储的数据信息,同时也可以自己用自己创建的数据库的接口。
https://api.github.com/users?since=0
2.6接口请求和解析
调用接口和请求数据需要在views.py中设置。
请求数据之前首先要引入requests模块
解析数据需要引入json模块
json模块不需要下载,系统自带的,而requests需要安装,安装代码为
pip install requests
示例如下:
在html中显示接收到的数据用两个花括号{{api}],括号内是刚书写的键值对的键的名字。
如下所示:
网页展示如下:
3.Django的基础使用
3.1请求与响应
请求与相应的步骤和第二部分Django实战项目过程中的配置路由和显示页面步骤一样,主要是明白如何通过配置文件里的路由然后将创建的html页面在网页上显示出来。
3.2模型与后台
主要是通过model.py创建数据表,其中可以添加需要的字符段。
通过models.py创建数据表之前首先要通过pymysql连接数据库。
然后在models.py中输入如下示例代码:
# models.py
from django.db import models
class Test(models.Model):
name = models.CharField(max_length=20)
以上的类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。
然后通过命令端输入以下命令进行表的创建。
TestModel为app的名称,注意根据自己创建的app名称进行修改。
python manage.py makemigrations # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate # 创建表结构
之后就可以在mysql中看到我们创建成功的数据表了,如图所示:
3.3视图和模板
视图就是在views.py下通过创建类或者方法显示页面,也可以调用接口,解析数据。
如下图是调用接口实例,用方法显示页面
模板即html模板,可以自行设计,也可以在网站上引用,例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<thead>
<tr>
<td>id</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
<td>年纪</td>
</tr>
</thead>
<tbody>
{% for student in student_queryset %}
<tr>
<td>{{ student.id }}</td>
<td>{{ student.name }}</td>
<td>{{ student.age }}</td>
<td>{{ student.gender }}</td>
<td>{{ student.grade }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
3.4表单操作语句
3.4.1增加
models.表名.objects.create(键值对)
示例:
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.create(title="如来神掌",price=200,publish="功夫出版社",pub_date="2010-10-10")
print(books, type(books)) # Book object (18)
return HttpResponse("<p>数据添加成功!</p>")
3..4.2查找
(1)使用 all() 方法来查询所有内容
返回的是 QuerySet 类型数据,类似于 list,里面放的是一个个模型类的对象,可用索引下标取出模型类的对象。
models.表名.objects.all()
示例:
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.all()
print(books,type(books)) # QuerySet类型,类似于list,访问 url 时数据显示在命令行窗口中。
return HttpResponse("<p>查找成功!</p>")
(2)fill方法
filter() 方法用于查询符合条件的数据。
返回的是 QuerySet 类型数据,类似于 list,里面放的是满足条件的模型类的对象,可用索引下标取出模型类的对象。
models.表名.objects.filter(条件)
示例:
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.filter(pk=5)
print(books)
print("//")
books = models.Book.objects.filter(publish='菜鸟出版社', price=300)
print(books, type(books)) # QuerySet类型,类似于list。
return HttpResponse("<p>查找成功!</p>")
(3)exclude() 方法
exclude() 方法用于查询不符合条件的数据。
返回的是 QuerySet 类型数据,类似于 list,里面放的是不满足条件的模型类的对象,可用索引下标取出模型类的对象。
models.表名.objects.exclude(条件)
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.exclude(pk=5)
print(books)
print("//")
books = models.Book.objects.exclude(publish='菜鸟出版社', price=300)
print(books, type(books)) # QuerySet类型,类似于list。
return HttpResponse("<p>查找成功!</p>")
(4)get() 方法
get() 方法用于查询符合条件的返回模型类的对象符合条件的对象只能为一个,如果符合筛选条件的对象超过了一个或者没有一个都会抛出错误。
models.表名.objects.get(条件)
示例:
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.get(pk=5)
books = models.Book.objects.get(pk=18) # 报错,没有符合条件的对象
books = models.Book.objects.get(price=200) # 报错,符合条件的对象超过一个
print(books, type(books)) # 模型类的对象
return HttpResponse("<p>查找成功!</p>")
(5)order_by() 方法
order_by() 方法用于对查询结果进行排序。
返回的是 QuerySet类型数据,类似于list,里面放的是排序后的模型类的对象,可用索引下标取出模型类的对象。
models.表名.objects.order_by(名称)
示例:
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
books = models.Book.objects.order_by("price") # 查询所有,按照价格升序排列
books = models.Book.objects.order_by("-price") # 查询所有,按照价格降序排列
return HttpResponse("<p>查找成功!</p>")
(6)reverse() 方法
reverse() 方法用于对查询结果进行反转。
返回的是 QuerySe t类型数据,类似于 list,里面放的是反转后的模型类的对象,可用索引下标取出模型类的对象。
models.表名.objects.order_by("-price").reverse()
示例:
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
# 按照价格升序排列:降序再反转
books = models.Book.objects.order_by("-price").reverse()
return HttpResponse("<p>查找成功!</p>")
3.4.3删除
(1)方式1
使用模型类的 对象.delete()。返回值:元组,第一个元素为受影响的行数。
models.表名.objects.filter(条件).first().delete()
示例:
books=models.Book.objects.filter(pk=8).first().delete()
(2)方式2
使用 QuerySet 类型数据.delete()(推荐)。返回值:元组,第一个元素为受影响的行数。
models.表名.objects.filter(条件).delete()
示例:
books=models.Book.objects.filter(pk__in=[1,2]).delete()
3.4.4修改
(1)方式1
模型类的对象.属性=更改的属性值
模型类的对象.save()
返回值:编辑的模型类的对象。
示例:
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
# 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
test1 = Test.objects.get(id=1)
test1.name = 'Google'
test1.save()
(2)方式2
QuerySet 类型数据.update(字段名=更改的数据)(推荐)
返回值:整数,受影响的行数
示例:
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
Test.objects.filter(id=1).update(name='Google')
# 修改所有的列
Test.objects.all().update(name='Google')
return HttpResponse("<p>修改成功</p>")