? 应用程序有两种的模式,分别是b/s以及c/s。
? b/s为浏览器与服务端之间的应用程序,而c/s为客户端与服务端之间的程序
? web就是b/s模式的应用程序,他只需要用户少量硬盘的资源,其余都在服务端之上,并且不用更新
? 由于完全是远距离传输,因此对浏览器以及互联网的连接比较依赖
? Python的web框架主要要三种:分别是Django、flask、tornado
? Django的特点是大而全,自带的动能比较多,但是过于笨重
? flask的特点是小而精,第三方模块比较多,比较依赖于第三方模块
? tornado的特点是异步非阻塞,支持高并发
? wsgi协议是Python种的一个协议,规定了怎么拆封HTTP协议
? HTTP协议数据传输使用的是明文,HTTPS协议数据传输使用的是密文
? models在后端渲染完,只要出了Django框架,就是完整的HTML,CSS,JS
? Django是一种同步框架,其中1.x版本和2.x版本在路由URL上是不同的
? 1.x版本上是使用URL,2.x上使用的是path
? 先导入URL,其中参数(传递给视图函数的默认形式,使用字典类型)和别名可以不写
? from Django.conf.urls import url
? urlpatterns = [ url(正则表达式,views视图函数,参数,别名)]
? Django setting.py配置中没有append_slash,其中Django默认append_slash = Ture,主要作用是在URL的末尾默认加入/,如果将append_slash = False加入setting.py中,就能取消/
? 有名分组和无名分组主要区别在于是否有(?p
? 有名分组:re_path(r^article/(?p
? 无名分组:re_path (r^article/(0-9){4}/$views.year_archive)
? 将一个总路由分发给多个子路由
? 路由分发:url(r‘^app01/‘,include(app01.urls))
? 子路由连接视图views:from django.conf.urls import url
? from app01 import views
? urlpatterns = [ url(r‘^reg/‘,views.reg)]
? 反向解析是同过后端向前端传递变量,通常传递的变量数据是主键值,用来处理数据的增删改查
? 使用的是reverse模块
from django.shortcuts import reverse
? url = reverse(‘test‘,args=(10,20)) 通过URL别名的一致,URL传递变量数据
? 由于子路由中,可能会出现相同的URL的别名,而反向解析是通过URL中的别名进行定位,因此Python建立了名称空间保证了互不干扰。
? 为了更好的识别子路由中对应的URL,因此在别名前添加子路由的信息,使其具有唯一性
urlpatterns = [url(r‘^reg/‘,views.reg,name=‘app01_reg‘)]
? Django2.x不支持URL,只能使用path
? path不支持正则,但是能用五种转换器,将进行限制path的第二路由,分别是:
? 1.str:可以匹配除了/以外的非空字符,为默认形式
? 2.int:匹配正整数,包括0
? 3.slug:匹配字母、数字、横杠、下划线组成的字符串
? 4.uuid:匹配格式化的uuid,例如: 075194d3-6885-417e-a8a8-6c931e272f00
? 5.path:匹配非空字符串
path(‘index/<int:id>‘,index)
class MonthConverter:
regex=‘\d{2}‘ # 属性名必须为regex
def to_python(self, value):
return int(value)
def to_url(self, value):
return value # 匹配的regex是两个数字,返回的结果也必须是两个数字
from django.urls import path,register_converter
from app01.path_converts import MonthConverter
# 先注册转换器
register_converter(MonthConverter,‘mon‘)
from app01 import views
urlpatterns = [
path(‘articles/<int:year>/<mon:month>/<slug:other>/‘, views.article_detail, name=‘aaa‘),
]
? 视图层响应对象的三种方式:分别是:
? 1.HttpResponse() 返回字符串类型
? 2.render() 返回HTML页面,并且在返回浏览器前还可以给HTML传值
? 3.redirect() 重定向
? 视图函数必须要返回一个HttpResponse
? 前端序列化:json.stringify() 前端反序列化:json.parse()
? 后端序列化:json.dumps() 后端反序列化:json.loads()
? 从后端向前端发送json格式的字符串有两种方式,一个是使用json.dumps()进行序列化,一个时使用Jsonresponse对象,进行序列化
import json
data = {‘name‘:‘ab‘}
return HttpResponse(json.dumps(data)) #第一种
from django.http import JsonResponse
data1 = {‘name‘:‘ac‘}
return JsonResponse(data1,safe = False) #第二种
? request对象的使用方法:
? request.method == :获取请求方式
? request.post:只能获取普通的键值对数据,不能获取文件
? request.get:获取get请求
? request.files:获取文件
? request.body:获取浏览器发过来的数据
? request.path:只能获取路由,不能获取路由后面的参数
? request.path_info :只能获取URL,不能获取路由后面的参数
? request.get_full_path():获取URL后面完整的参数
? 301为永久性的重定向,之前的路由已经失去
? 302位暂时性的重定向,之前的路由还在,只是暂时不能使用
? class base views 基础类视图
? 使用类的基础视图,需要先从view里面继承view
from django.views import view
class Mylogin(view):
def get(self,request):
return render(request,‘form.html‘)
def post(self,request):
return HttpRsponse(‘post方法‘)
? function base views 基础函数视图
? 使用函数的基础视图,视图函数中必须要传request
def index(request):
return HttpResponse(‘index‘)
def index(request):
if request.method == ‘GET‘:
return render(request,‘index.html‘)
else:
myfile = request.FILES.get(‘myfiles‘)
from django.core.files.uploadedfile import InMemoryUploadedFile
name = myfile.name
with open(name,‘wb‘) as f:
for line in myfile:
f.write(line)
return HttpResponse(‘文件上传成功‘)
?
?
原文:https://www.cnblogs.com/jingpeng/p/13228220.html