Django的使用,主要是提供了一个服务器的接口,这样我们的后端和前端就可以通过这个接口来进行交互。如果我们自己来写一个web服务器框架的话,是这样的:
1 import socket 2 3 sk = socket.socket() 4 sk.bind(("127.0.0.1", 8080)) 5 sk.listen(5) 6 7 def login(): 8 with open("login.html", encoding="utf-8") as f: 9 data = f.read() 10 import time 11 time_s = str(time.time()) 12 data_new = data.replace("@@xx@@", time_s) 13 return data_new 14 15 def index(): 16 with open("index.html", encoding="utf-8") as f: 17 data = f.read() 18 # 链接数据库,找数据 19 import pymysql 20 conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="", db="day48", charset="utf-8") 21 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) 22 cursor.execute("select id, name, balance from user") 23 user_list = cursor.fetchall() 24 cursor.close() 25 conn.close() 26 """ 27 <tr> 28 <td>id</td> 29 <td>name</td> 30 <td>balance</td> 31 </tr> 32 """ 33 ret = "" 34 for i in user_list: 35 ret += """ 36 <tr> 37 <td>{0}</td> 38 <td>{1}</td> 39 <td>{2}</td> 40 </tr> 41 """.format(i["id"], i["name"], i["balance"]) 42 data_new = data.replace("@@xx@@", ret) 43 return data_new 44 45 46 def info(): 47 return "这是个人信息页" 48 49 50 url_func_map = [ 51 ("/login/", login), 52 ("/index/", index), 53 ("/info/", info) 54 ] 55 56 57 while True: 58 conn, addr = sk.accept() # 夯在此地,等待链接 59 data = conn.recv(8096) 60 # 类型转换 字节类型-->字符串 61 data_str = str(data, encoding="utf-8") 62 # 取到请求头 63 header = data_str.split("\r\n\r\n")[0] 64 # 再取到 “GET / HTTP/1.1” 65 tmp = header.split("\r\n")[0] 66 # 再按照空格分割,得到列表,取索引值是1的 67 url = tmp.split(" ")[1] 68 conn.send(b"HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n") # 响应头 69 # 根据请求URL的不同,我返回不同的内容 70 func_name = None # 定义一个存放将要执行函数的变量 71 # for循环url_func_map 72 for i in url_func_map: 73 if i[0] == url: 74 func_name = i[1] 75 break 76 if func_name: 77 response = func_name() 78 else: 79 response = "404" 80 conn.send(bytes(response, encoding="utf-8")) # 响应体 81 conn.close()
但是我们启用了Django来进行一个项目的话,就可以直接借用Django的服务器接口
很简单,创建Django项目:
开启服务器:
这样我们就开启了一个Django的服务器
我们所创建的Django项目中,分为几个文件夹和py文件
settings.py中存放的是配置文件
配置文件里面需要做的设置:
1. templates
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], # 在这里进行设置 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
2. 中间件需要注释一个(如果前端对csrf进行了处理就不用)
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. 静态文件设置
STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, "ss"), # 静态文件存放位置 )
主程序代码写在url里面,当然,可以新建其他py文件来区分模块代码
template文件夹下存放html文件,可以改名,在配置文件中修改
静态文件设置的文件夹下存放渲染文件,js和css等
Django项目中,我们需要用模板语言在html中进行数据的展示:
{% for i in xx %} {{ i }} {% emty %} //存放没有值执行的 {% endfor %} 同时模块也支持if判断
Django前端与后端的交互中,后端发送消息与接受消息的方式:
1. request 代表了所有请求相关的内容
1. request.method 2. request.POST.get("xxx")
2. 新手三件套:
from django.shortcuts import HttpResponse, render, redirect 1. HttpResponse() 2. render 渲染 1. render(request, "xx.html") 2. render(request, "xx.html", {"num": 123}) 3. redirect() 跳转到xx