Django基础介绍

Stella981
• 阅读 607

Django

web应用的本质

socket网络编程:

​ 架构:C/S架构

​ 协议:TCP/UDP协议

​ 传输层

web应用:

​ 架构:B/S架构

​ 协议:Http协议

​ 应用层

#字符串转字节:bytes('hfihajfaiuu',encoding='utf-8')

#字节转字符串:str(res,encoding='utf-8')

Http协议:

请求头:
GET / HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9 

请求体:    
dsjahbdjsahjdsa


响应头:
HTTP/1.1 200 OK

响应体:
"hello world"
用户看到的内容


改造之后, 动态的server:
def f1():
return bytes('xxxx', encoding='utf-8')

def f2():
return bytes('oooo', encoding='utf-8')

def f3():
return bytes('aaaa', encoding='utf-8')

路由系统

作用:将客户端请求的url映射到相应的函数,最后执行该函数即可

routes = [
                ('/xxx', f1),
                ('/ooo', f2),
                ('/aaa', f3),
            ]

def run():
import socket
sock = socket.socket()
sock.bind(('127.0.0.1', 8080))
sock.listen(5)

while True:
conn, addr = sock.accept()
data = conn.recv(8090)
# print(data)
### 转成字符串类型
data_str = str(data, encoding='utf-8')

header_list = data_str.split('\r\n\r\n')
headers = header_list[0]
url = headers.split('\r\n')[0].split(' ')[1]

### 判断url
# if url == '/xxx':
#     res = bytes('xxxx', encoding='utf-8')
# elif url == '/ooo':
#     res = bytes('oooo', encoding='utf-8')
# else:
#     res = bytes('404 not found', encoding='utf-8')
func_name = None
for items in routes:
if items[0] == url:
func_name = items[1]
break
if func_name:
res = func_name()
else:
res = bytes('404 not found', encoding='utf-8')

conn.send(bytes("HTTP/1.1 200 OK\r\n\r\n",encoding='utf-8'))
conn.send(res)
conn.close()

自己写web框架

1.自己写socket服务端

2.路由系统:

​ url ===> 函数

3.模板引擎渲染

​ 1)自己定义的规则

​ 2)使用第三方工具 (jinja2)

web框架的分类

第一维度分类:

1.1、2、3 ---> tornado

2.1(引入第三方)、2、3 ---> django (wsgiref/uwsgi)

3.1(引入第三方)、2、3(引入第三方) ---> flask

第二维度分类:

1.django

- orm
- session
- form表单验证
- 。。。

2.其他

django的安装和启动

1.django的安装: a. pip3 install django==1.11.22 -i https://pypi.tuna.tsinghua.edu.cn/simple

b. pycharm安装

2.django的创建: a. django-admin startproject xxx

b. pycharm创建

3.django目录结构:

s9day54: s9day54: settings.py: 配置文件 urls.py: 路由映射关系 wsgi.py : socket服务端文件 manage.py: 管理文件

4.启动django服务: pycharm启动

django的路由介绍

添加路由和函数的对应关系:

urlpatterns = [ #url(r'^admin/', admin.site.urls), ​ url(r'^index/', index), ​ ]

def index(request):

​ return HttpResponse('index')

django的模板介绍

1.模板渲染函数: def f1(request): return render(request, 'f1.html')

2.变量替换: name = 'zekai'

render(request, 'f1.html', {"name":name})

html页面:

{{ xxx }}

3.以后再去创建django项目的时候, 需要做的几个操作: 到settings.py中, 配置:

  1. STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), ) 逗号不能少 static目录需要创建

  2. MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', #'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]

  3. 'DIRS': [os.path.join(BASE_DIR, 'templates')]

  4. django的连接数据库操作

    a.pymysql连接 b.django的orm连接

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
2年前
RPC调用(架构)和HTTP调用(架构)的区别
我是接触到了Dubbo,才接触到RPC服务的。它处于的网络模型的传输层,而http处于应用层,RPC处于更底层所以效率更高!本文简单地介绍一下两种形式的C/S架构,先说一下他们最本质的区别,就是RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜
Wesley13 Wesley13
2年前
TCP、UDP和HTTP关系
先来一个讲TCP、UDP和HTTP关系的http:是用于www浏览的一个协议。tcp:是机器之间建立连接用的到的一个协议。1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应用层有FTP、HTT
Wesley13 Wesley13
2年前
TCP、UDP和HTTP区别详解
http:是用于www浏览的一个协议。tcp:是机器之间建立连接用的到的一个协议。1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这