首先,REST是一种Web API的风格。那么接下来要问的是,什么是Web API呢?
Web API是一个应用程序接口。这个接口在web server端或者web browser端。
匹配REST设计风格的Web API称为RESTful API。具体来讲,REST风格是什么风格呢?
REST风格是基于HTTP协议上的一组约束和属性,具体的约束和属性有哪些呢?下面列了几条重要的架构约束。
客户-服务器(Client-Server)
通信只能由客户端单方面发起,表现为请求-响应的形式。
通信的会话状态(Session State)应该全部由客户端负责维护。
响应内容可以在通信链的某处被缓存,以改善网络效率。
通信链的组件之间通过统一的接口相互通信,以提高交互的可见性。
通过限制组件的行为(即每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。
支持通过下载并执行一些代码(例如Java Applet、Flash或JavaScript),对客户端的功能进行扩展。
REST风格从以下三个方面资源进行定义:
①采用直观简短的资源地址:URI,比如:http://example.com/resources/。
②规定传输的资源类型为Web服务接受与返回的互联网媒体类型,比如:JSON,XML,YAML等。
③规定对资源的操作方法为Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。
socket是TCP套接字,UDP套接字里面的概念。HTTP则是基于TCP协议的上层协议(应用层)。Websocket是HTTP衍生出来的全双工通信协议,也是一种上层协议(应用层)。TCP、UDP是运输层的协议。进程通过一个称为套接字的接口在网络上传输报文,开发者可以控制套接字在应用层端的东西。那些具有缓存、变量的TCP则由操作系统控制。
WSGI server只负责给后台app一个方法,后台app处理请求后,调用该方法,生成http的状态码和报文头,发送给浏览器。对于响应的正文部分,app只要将响应内容交给WSGI server,由WSGI server负责封装成http正文格式。
CSRF(cross-site request forgery)跨域请求伪造是一种对网站的恶意利用。
网站对于CSRF攻击的防御全过程如下:
Django主要通过WSGI模块与Apache2之间进行通信,因此需要apache2安装mod_wsgi模块
1 安装apache2,django,python3
sudo apt-get install apache2
sudo pip3 install django
2 安装mod_wsgi
sudo apt-get install libapache2-mod-wsgi-py3
mod_wsgi的目标是实现一个支持python WSGI模块的python应用程序的托管
在apache2的文件目录下 创建自己的配置文件
sudo vim /etc/apache2/sites-available/项目名称.conf
创建完后,在配置文件中写入内容
<VirtualHost *:8000>
ServerName localhost:8000
#填写自己服务器的域名或者IP
ServerAlias example.com
#其他域名
ServerAdmin [email protected]
#邮箱
DocumentRoot /home/diyuandeng/restful_site
#Alias /static "/home/diyuandeng/restful_site/static"
WSGIScriptAlias / /home/diyuandeng/restful_site/restful_site/wsgi.py
<Files wsgi.py>
Require all granted
Allow from all
Files>
Directory>
编辑apache2.conf文件
sudo vim /etc/apache2/apache2.conf
#添加WSGI路径
WSGIPythonHome /home/diyuandeng/.virtualenvs/python3_django
WSGIPythonPath /home/diyuandeng/restful_site
# 添加虚拟host配置
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
启动apache2配置,重启服务
sudo a2ensite 项目名称.conf
sudo service apache2 restart
如果django运行在127.0.0.1上,vue运行在localhost上,浏览器不能同时获取两个的cookie(同源策略限值),这样会造成csrftoken获取失败。解决办法是让django和vue运行在同一ip不同端口下。
ORM模型:models里面填写blank=true,表示允许该值为空,填写该字段的时候可以不填,空值将会被存储为NULL,默认为False。
null=true表示如果为True,空值在数据库中将会被存储为NULL,默认为false
创建objects.create(**kwargs)
获取objects.get(**kwargs)