一、 API接口设计:
目前流行的是 REST API风格接口 需要设计具体的API请求和响应消息的具体内容。
**
二、 Http协议
** 前端与后端的交互通过http协议进行通信,必须了解http协议的基础知识。 http 版本 0.9 1.0 1.1 2 3 最广泛的使用1.1 http协议的最大特点就是 通信双方分为客户端和服务端 状态码: 2xx 表示请求消息没有问题,而且服务器也正确处理了 3xx 表示重定向相应,301,302,表示客户端的这个请求的url地址已经改变了,需要客户端重新发起一个请求到另外一个url 4xx 表示客户端请求错误 400 表示客户端请求不符合接口要求,如格式完全错误 401 表示客户端需要先认证才能发送次请求 403 表示客户端没有权限要求服务器处理这样的请求 404 表示客户端请求的url不存在 5xx 服务端在处理请求中,发生了未知的错误,通常是服务端的代码设计问题,或者服务端子系统出了故障(数据库宕机)
三、 Django学习
- 创建项目目录
django-admin startproject bysms
wsgi web服务网关接口:遵循wsgi规范的web后端系统,可以理解为由两部分组成,运行在一个python进程中的两个模块,或者两个子系统 wsgi web server:接受前端的http请求,调用web application 的接口方法。 wsgi web application 具体处理请求,再把结果返回给wen server,web server再返回给前端。
两个侧重点不同: web server 负责提供高效的http请求处理环境,可以使用多线程、多进程或轻量级线程的机制。 web application 负责处理业务逻辑,业务逻辑的处理非常复杂,需要精心的设计来正确处理。 django开标只提供一个可供调试的单线程web server,后期产品上线需要高效的webserver产品,如gunicorn、uwsgi、cherrypy等,结合django自称一个高效的后端服务。
- 运行django服务
python manage.py runserver 0.0.0.0:80
- 创建项目app
3.1 django中的一个app就是项目里面的一个应用的意思,一个项目可以包含多个多个app,一个app通常就是一个相对独立的模块,实现相对独立的功能。 如,管理员设计在mgr模块中,销售员设计在sales模块中。 创建项目app:
python manage.py startapp sales
3.2 返回页面内容给浏览器 view.py 通常是写处理http请求代码的
3.3 url路由 所谓url路由就是指,根据http请求的url路径,设置由 哪个函数来处理这个请求 urls.py处理http的路由,进行设置访问
from django.contrib import admin from django.urls import path
别忘了导入 listorders 函数
from sales.views import listorders
urlpatterns = [
path('admin/', admin.site.urls),
path('sales/orders/', listorders),
]
- 创建数据库和表
广泛使用的数据库有 mysql、postgresql
4.1 数据库的配置在 bysms/settings.py 中的DATABASES中
4.2 创建数据库
python manage.py migrate
4.3 ORM 通过对象操作数据库的方法被称为ORM 在models.py中定义数据库的表 4.4 配置数据库表 settings.py 中的INSTALLED_APPS中添加
'common.apps.CommonConfig',
4.5修改库表的定义需要每次都执行
python manage.py makemigrations common
python manage.py migrate
4.6 django提供一个管理员届满可以方面的添加修改删除定义的model表数据。 创建一个超级管理员账号,
python manage.py createsuperuser
用户名
邮箱
passwd
修改应用里面的管理员配置文件,common/admin.py
from django.contrib import admin
from .models import Custoer
admin.site.register
admin界面配置中文语言 在settings.py 中的MIDDLEWARE 添加
'django.middleware.locale.LocaleMiddleware',
4.7 读取数据库数据
django中队数据库表的操作,应该都通过Model对象实现对数据的读写,而不是通过SQL语句
from common.models import Customer
qs = Customer.objects.values()
添加过滤条件:
ph = request.GET.get('phpnenumber',None)
qs = qs.filter(phonenumber = ph,adress = '江苏浙江')
- 前后端分离架构
5.1 代码直接生成HTML 5.2 使用模版(模版引擎,专门处理HTML模版的库) java中的JSP python中的jinja2,Mako,Django也内置了一个这样的模版引擎 5.3 直接将html内容生成的任务放到前端,服务端只负责提供数据,界面的构成全部在前端进行,称之为前端渲染。 这个工作在前端执行,使用前端的框架库区完成,比如Angular,React、Vue 这样定义好前后端交互数据的接口,前后端就分离了。 注意:Django返回的信息,同城都是所谓的动态数据信息,存放在数据库中的。而静态信息如,html文档、css文档,图片、视频是不应该由 Django负责返回数据的,应该有静态资源服务软件,如Nginx、Varnish等等,返回给前端,这些软件都会有效的对静态数据进行缓存,大大提高 服务效率。在实际项目中,往往还会直接使用静态文件云服务(OSS + CDN)提供静态数据的访问。
- 临时取消CSRF校验
缺省创建的项目,Django会启用一个CSRF(跨站请求伪造安全防护机制)调试阶段临时取消改校验,
在settings.py中的middleware中将
'django.middleware.csrf.CsrfViewMiddleware'
注释掉即可。
7.测试后端代码:
import requests,pprint
response = requests.get(url)
pprint.pprint(response.json())
8.和前端集成(调试开发模式)
将前端系统系统打包,形成一个目录 z_dist 在bysms、urls.py文件末尾添加 +static(“/”,document_root=‘./z_dist’) 并添加如下声明:
from django.conf.urls.static import static
|