Django--初识

    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("

")[0]
64     # 再取到 “GET / HTTP/1.165     tmp = header.split("
")[0]
66     # 再按照空格分割,得到列表,取索引值是1的
67     url = tmp.split(" ")[1]
68     conn.send(b"HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8

")  # 响应头
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()
自己写web服务器框架

   但是我们启用了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
原文地址:https://www.cnblogs.com/gaoshengyue/p/7929169.html