第1章 Web应用
1.1什么是web应用程序?
Web 应用程序就是一种可以通过web访问的应用程序,程序的最大好处就是用户很容易访问程序,因为用户只需要有浏览器即可,不需要安装其他软件
应用程序有两种模式C/S,客户端和服务端,B/S,是浏览器和服务端,这类应用程序一般借助浏览器来运行,web应用程序一般是B/S模式
第2章 Web框架:
2.1什么是web框架?
Web框架是一种开发框架,用来支持动态网站,网络应用和网络服务的开发,着大多数的web框架提供了一套开发和部署网站的方式,也是为了web行为提供了一套通用的方法,web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了
2.2Python中的web框架:
Django 大而全
Flask 轻量级
Tornado 高性能
第3章 Django简介与安装使用
3.1MVC与MTV模型
MVC
Web应用开发里著名的MVC模式,就是吧web应用分为:模型(M),控制器(C),视图(V)三层,他们之间以一种插件式的,松耦合的方式联系在一起,模型负责业务对象与数据库的映射(ORM),试图负责与用户的交互,控制器接受用户的调用模型和试图完成用户的请求
MTV
Django的MTV本质上和MVC是一样的,只是定义上有些许不同
1. M代表(model):负责业务和数据库的关系映射(ORM)
2. T代表(template):负责如何把页面展示给用户(html)
3. V代表视图(view):负责业务逻辑,并在适当的时候调用model和template
4. 除了以上三层之外,还需要一个url分发器,他的作用是将一个个的url的页面请求分发给不同的view处理,view在调用相应的model和template,MTV响应模式如下
3.2什么是Django?
Django是一个web框架,web框架的本质就是一个socket服务端
3.3Django的安装与使用
Ø 安装django
pip3 install django==1.11.9 -i http://pypi.hustunique.org/simple
Ø 创建一个django项目
django-admin startproject mydjango
Ø 文件说明:
manage.py----django项目的工具,通过他可以调用django shell和数据库等
settings.py----包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量
urls.py----负责把url模式映射到应用程序
Ø Django目录下创建应用:
python3 manage.py startapp app01
Ø 启动django项目
python3 manage.py runserver 8000
3.4Django简单示例:
url控制器
from django.conf.urlsimport url
from django.contribimport admin
from app01import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
]
视图:
# Create your views here.
def index(request):
returnrender(request,'index.html')
模版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>hello</div>
</body>
</html>
3.5新手三件套:
from django.shortcuts import render,HttpResponse,redirect
# Create your views here.
def index(request):
#向浏览器返回字符串
#return HttpResponse('hello web')
#向浏览器返回页面
#return render(request,'index.html')
#返回重定向
return redirect('http://www.baidu.com')
3.6Django的path问题
Ø 在1.X中
使用url,而且是支持正则
Ø 在2.X中
re_path就是1.X中的url
2.X中的path是新增的,但是url的方式也支持
path('准确路径',views.test,name='test')
第4章 路由
4.1django中路由的作用:
url配置就像django所支撑的目录,它的本质是url与要为该url调用的试图函数之间的映射表,你就是以这种方式告诉django,对于客户端发来的某个url调用那一段逻辑代码对应执行
4.2无名分组
括号内的内容会被分组分出来,当作参数,以位置参数的形式传到视图函数,视图函数应该接受这些参数
urls
urlpatterns= [
url(r'^admin/', admin.site.urls),
url(r'^index/(\d+)/(\d+)', views.index),
]
views
def index(request,res):
print(res)
return HttpResponse('hello')
4.3有名分组
括号内的内容会被分组分出来,当作参数,以关键字参数的形式传到视图函数,视图函数应该接受这些参数
urls
urlpatterns= [
url(r'^admin/', admin.site.urls),
url(r'^index/(?<m1>\d+)/(?<m2>\d+)',views.index),
]
views
def index(request,m1,m2):
print(m1,m2)
return HttpResponse('hello')
4.4反向解析:
Ø 在不使用反向解析,想达到访问index的时候跳转到test页面上需要这样做
urls
from app01import views
urlpatterns = [
url(r'^test/', views.test),
url(r'^index/', views.index),
]
views
def index(request):
return redirect('/test/')
def test(requset):
return HttpResponse('我是test首页')
Ø 上面的方法可以看出来,如果urls中的目录地址更换,那么后面views中跳转的地址全部需要更改,为了简化这个操作,就要用到反向解析了
urls
urlpatterns= [
url(r'^test/$', views.test,name='test'),
url(r'^index/$', views.index),
]
views
def index(request):
url=reverse('test')
return redirect(url)
def test(requset):
return HttpResponse('我是test首页')
Ø 反向解析在模版中的使用:
urls
urlpatterns= [
url(r'^test/$', views.test,name='test'),
url(r'^index/$', views.index),
]
views
def index(request):
return render(request,'index.html')
def test(requset):
return HttpResponse('我是test首页')
html
<body>
<div>Django的index页面</div>
<a href="{% url 'test' %}">点击进入test页面</a>
</body>
4.5路由分发:对多个app进行管理
1. 创建第二个app
python3 manage.py startapp app02
2. 在settings中进行注册:
INSTALLED_APPS= [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
'app02',
]
3. 在总路由中
#导入include模块
from django.conf.urlsimport url,include
from django.contribimport admin
#app总入口
urlpatterns = [
url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls'))
]
4. 在不同app下
app01
from django.conf.urlsimport url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^app01test/', views.test),
]
app02
from django.conf.urlsimport url
from django.contrib import admin
from app02 import views
urlpatterns = [
url(r'^app02test/', views.test),
]
app01
from django.shortcutsimport render,HttpResponse,redirect,reverse
# Create your views here.
def test(requset):
returnHttpResponse('我是app01的test页面')
app02
from django.shortcutsimport render,HttpResponse,redirect
# Create your views here.
def test(request):
returnHttpResponse('我是app02的test页面')
第5章 视图层
5.1请求对象requset
#requset是一个对象,请求对象
#请求的方法
print(requset.method)
#请求地址
print(requset.path)
#请求全路径
print(requset.get_full_path())
#get方式传递的参数
print(requset.GET)
return HttpResponse('我是index页面')
5.2向前端返回一个json格式字符串的两种方式:
1. 利用json模块
import json
# Create your views here.
def index(requset):
data={'name':'jiang','age':10}
returnHttpResponse(json.dumps(data))
2. 利用jsonRequest
from django.httpimport JsonResponse
# Create your views here.
def index(requset):
data={'name':'jiang','age':10}
returnJsonResponse(data,safe=False)
5.3文件上传案例:
html
<body>
<form action="" method="post" enctype="multipart/form-data">
<p>
<input type="file" name="myfile">
</p>
<input type="submit" value="提交">
</form>
</body>
urls
from app01import views
urlpatterns = [
url(r'^index/', views.file_upload),
]
views
rom django.shortcutsimport render,HttpResponse,redirect,reverse
# Create your views here.
def file_upload(requset):
ifrequset.method == "GET":
returnrender(requset,'index.html')
files=requset.FILES
myfile=files.get('myfile')
withopen(myfile.name,'wb') as f:
forline inmyfile:
f.write(line)
returnHttpResponse('文件上传成功')
第6章 模版层
6.1模版语言语法:
变量:{{变量名}}
1. 深度查询,用点号
2. 过滤器
标签:{{% %}}
6.2简单使用:
html
<body>
{{ time }}
</body>
views
import time
# Create your views here.
def index(requset):
ctime=str(time.time())
returnrender(requset,'index.html',{'time':ctime})
6.3locals用法:
<body>
<p>{{ ctime }}</p>
<p>{{ dic }}</p>
<p>{{ dic.name }}</p>
</body>
views
def index(requset):
ctime=str(time.time())
dic={'name':'jiang','age':10}
# return render(requset,'index.html',{'time':ctime,'dic':dic})
#会把该函数中所有的变量,构造成字典,传到模版中
returnrender(requset,'index.html',locals())