初识前后端分离
对于Python全栈开发工程师来说,使用django开发整个网站项目,是一件再普通不过的事儿了,django强大的模板系统,并没有足以让一个全栈开发工程师觉得有必要搞什么前后端分离,但术业有专攻,一个后端,可以对应不同的前端(比如pc网页端,手机wap端,移动端app,微信小程序……),往往公司的业务需求,都是需要各个流量入口都有的全家桶,如果让全栈工程师,不断开发后端,还要一个一个一种一种的将不同的前端代码开发出来,恐怕过于费时费力了。所以,在面对大型项目时,django全栈开发工程师,还是只要做好后端,开发好api接口,就可以了,其他的,交给其他人做吧!
1.前后端分离,开发工程师最重要的任务,就是开发api也就是接口,何为api呢?
#urls.py
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('users/',views.users),
]
#views.py
import json
from django.shortcuts import HttpResponse
from django.views import View
def users(request):
user_list=['alex','oldboy']
return HttpResponse(json.dumps(user_list))
启动运行django项目,访问http://127.0.0.1:8000/users/
其中http://127.0.0.1:8000/users/ ,就是一条api,只要访问这个api,就给返回特定数据["alex", "oldboy"]
2.FBV与CBV
FBV:function base view 基于函数视图
CBV:class base view 基于类视图
#urls.py
……
from app01.views import StudentView
urlpatterns = [
……
path('student/',StudentView.as_view()),
]
class StudentView(View):
"""简单测试"""
def get(self,request):
return HttpResponse('GET')
def post(self,request):
return HttpResponse('POST')
def put(self,request):
return HttpResponse('PUT')
def delete(self,request):
return HttpResponse('DELETE')
在settings.py 中注释掉CSRF中间件,启动运行django项目
通过使用软件postman,以不同的方式模拟访问http://127.0.0.1:8000/student
3.列表生成式
class Foo:
pass
class Bar:
pass
v=[item() for item in [Foo,Bar]]#列表生成式,v是一个列表对象
#相当于
v=[]
for i in [Foo,Bar]:
obj=i()
v.append(obj)
4.面向对象
1.封装
#对同一类方法,封装到类中
#将数据封装到对象中
2.执行流程
5.小知识点
#view中这样写,给函数加上这个装饰器,可以让这个视图函数不用CSRF检验
from django.views.decorators.csrfimport csrf_exempt,csrf_protect
@csrf_exempt
def users(request):
user_list=['alex','oldboy']
return HttpResponse(json.dumps(user_list))
#view中这样写,给类加上这个装饰器,可以让这个视图类不用CSRF检验
from django.viewsimport View
from django.views.decorators.csrfimport csrf_exempt,csrf_protect
from django.utils.decoratorsimport method_decorator
@method_decorator(csrf_exempt,name='dispatch')
class StudentView(View):
"""简单测试"""
def get(self,request):
return HttpResponse('GET')
def post(self,request):
return HttpResponse('POST')
def put(self,request):
return HttpResponse('PUT')
def delete(self,request):
return HttpResponse('DELETE')
这个知识点,可以用于权限认证的书写
6.关于CBV的小总结
#总结
#本质:基于反射实现
#流程:路由 View dispatch(反射)
#取消csrf认证