建站知识

REST和RESTful

首先,REST是一种Web API的风格。那么接下来要问的是,什么是Web API呢?
Web API是一个应用程序接口。这个接口在web server端或者web browser端。
匹配REST设计风格的Web API称为RESTful API。具体来讲,REST风格是什么风格呢?
REST风格是基于HTTP协议上的一组约束和属性,具体的约束和属性有哪些呢?下面列了几条重要的架构约束。

  • List item

客户-服务器(Client-Server)
通信只能由客户端单方面发起,表现为请求-响应的形式。

  • 无状态(Stateless)

通信的会话状态(Session State)应该全部由客户端负责维护。

  • 缓存(Cache)

响应内容可以在通信链的某处被缓存,以改善网络效率。

  • 统一接口(Uniform Interface)

通信链的组件之间通过统一的接口相互通信,以提高交互的可见性。

  • 分层系统(Layered System)

通过限制组件的行为(即每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。

  • 按需代码(Code-On-Demand,可选)

支持通过下载并执行一些代码(例如Java Applet、Flash或JavaScript),对客户端的功能进行扩展。

REST风格从以下三个方面资源进行定义:
①采用直观简短的资源地址:URI,比如:http://example.com/resources/。
②规定传输的资源类型为Web服务接受与返回的互联网媒体类型,比如:JSON,XML,YAML等。
③规定对资源的操作方法为Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。

MVC架构的Website

WebSocket、HTTP、socket

socket是TCP套接字,UDP套接字里面的概念。HTTP则是基于TCP协议的上层协议(应用层)。Websocket是HTTP衍生出来的全双工通信协议,也是一种上层协议(应用层)。TCP、UDP是运输层的协议。进程通过一个称为套接字的接口在网络上传输报文,开发者可以控制套接字在应用层端的东西。那些具有缓存、变量的TCP则由操作系统控制。

WSGI概述和APP开发

http请求
调用APP
http状态码和报文头
响应正文
http正文
浏览器
WSGI server
WSGI app

WSGI server只负责给后台app一个方法,后台app处理请求后,调用该方法,生成http的状态码和报文头,发送给浏览器。对于响应的正文部分,app只要将响应内容交给WSGI server,由WSGI server负责封装成http正文格式。

CSRF技术详解

CSRF(cross-site request forgery)跨域请求伪造是一种对网站的恶意利用。
网站对于CSRF攻击的防御全过程如下:

  1. 浏览器首次访问网站时,服务器会在响应的响应头里面设置set-cookie字段。set-cookie字段的内容就包括csrftoken。这个csrftoken的值是服务器随机生成的一个值。
  2. 浏览器在下一次访问该网站时,会在请求头中携带服务器返回的cookie值,其中也包括这个csrftoken的值。当用户向服务器发送POST请求时,服务器会检查该请求的cookie,并取出其中的csrftoken值。
  3. 然后,服务器会检查该请求的请求体中是否含有csrftoken的值,如果不含有csrftoke或者csrftoken值与cookie中的不一致,则拒绝该请求,返回状态码403。
首次请求
首次返回setcookie:csrftoken
设置请求头
设置请求体
返回响应体
浏览器
服务器
cookie:csrftoken:xxxx
csrftoken:xxxx
检查请求体和请求头csrftoken
验证一致

Linux下Apache HTTP Server 2与Django部署

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 xxx@Email.com
    #邮箱
	DocumentRoot /home/diyuandeng/restful_site
	#Alias /static "/home/diyuandeng/restful_site/static"
    WSGIScriptAlias / /home/diyuandeng/restful_site/restful_site/wsgi.py
    <Directory /home/diyuandeng/restful_site/restful_site/>
       <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不同端口下。

django相关

ORM模型:models里面填写blank=true,表示允许该值为空,填写该字段的时候可以不填,空值将会被存储为NULL,默认为False。
null=true表示如果为True,空值在数据库中将会被存储为NULL,默认为false

创建objects.create(**kwargs)
获取objects.get(**kwargs)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值