初识Django

一、静动态网页

当前端页面需要从数据库或者从后端代码上获取到对应数据时 , 需要将前端页面进行转化。需要通过jinja2模块将前端页面进行转化。

下载模块

pip install jinja2
import pymysql
from jinja2 import Template
from wsgiref.simple_server import make_server

def index(url):
    with open('index.html' , 'r' , encoding='utf-8') as f:
        data = f.read()
    return bytes(data.encode('utf-8'))

def get_data(url):
    user_data = {'name':'阿宸','age':26}
    with open('get_dict.html' , 'r' , encoding='utf-8') as f:
        data = f.read()
    '''
    通过Jinja2模块 , 讲html读取出来的数据使用模板进行处理
    就是将html文件转化之后也可以使用类似后端语言进行处理数据
    '''
    temp = Template(data)
    # 将字典数据传递到前端页面中 , 用键值对的方式进行传递数据
    # 会返回一个接收到后端数据的前端页面
    res = temp.render(user=user_data)
    return bytes(res.encode('utf-8'))

def get_db(url):
    db = pymysql.connect(
        host='localhost',
        user='root',
        password='root',
        charset='utf8',
        database='webdata'
    )
    # 以字典的形式获取数据
    cur = db.cursor(cursor=pymysql.cursors.DictCursor)
    sql = 'select * from user'
    cur.execute(sql)
    data_dict = cur.fetchall()

    with open('get_db.html' , 'r' , encoding='utf-8') as f:
        data = f.read()
    temp = Template(data)
    res = temp.render(data_list = data_dict)
    return bytes(res.encode('utf-8'))

# 函数与url的对应关系
url_dict = {
    '/index/':index,
    '/get/':get_data,
    '/get_db/':get_db
}

def run(environ , response):
    response('200 OK' , [])
    # 根据不同的url后缀(路由) 去响应对应功能函数
    url = environ['PATH_INFO']
    msg = 1
    # 遍历字典 , 获取url对应的函数
    for i in url_dict:
        if i == url:
            response_data = url_dict[i](url)
            msg = 0
            break
    if msg:
        response_data = b'404 not found'
    return [response_data]


if __name__ == '__main__':
    httpd = make_server('127.0.0.1', 8086 , run)
    httpd.serve_forever()
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table>
        <tr>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
        </tr>
        <!-- 接收后端从数据库中传递过来的列表数据 -->
        <!-- 遍历列表数据 -->
        {% for data in data_list %}
        <tr>
            <!-- data 是一个字典的数据-->
            <td>{{data.name}}</td>
            <td>{{data.gender}}</td>
            <td>{{data.age}}</td>
        </tr>
        <!-- 在html里面写循环需要设置结束标志 -->
        {% endfor %}
    </table>
</body>
</html>

二、创建Django项目

Django
	大型的web框架 , 自带的组件非常多

flask
	小型的web框架 , 自带的组件很少 , 主要依赖第三方模块

tornado
	难度极高 , 但是性能好
	框架中所有配置都需要自己写

下载Django之前确保工具不会发生版本问题

python版本:3.7以上,3.8
pycharm:2020 , 一定要用专业版
django:3.2
mysql:5.7 以上

下载django

pip install django==3.2
-i http://pypi.douban.com/simple --trusted-host pypi.douban.com 

检验是否下载成功

在cmd中输入:django-admin
有返回数据就是下载好了

创建django项目

django项目创建的路径不要出现中文

计算机名称不要是中文

一、在cmd创建
	1、打开项目文件夹(项目要存放的地方)
	2、创建django项目
	django-admin startproject 项目名称
	3、启动django项目
	进入项目文件夹中
	python manage.py runserver
	关闭ctrl + C

二、在pycharm中创建
	flie -- new project
	选择django进行创建
三、应用app
	项目中的各部分功能 , 项目中不同的功能创建不同应用
	创建应用的命令
	python manage.py startapp 应用名称

Django项目中的文件

mysite
|--- mysite
|	|--- asgi.py  异步处理操作[暂时不需要]
|	|--- settings.py  项目的配置文件
|	|--- urls.py	路由配置
|	|--- wsgi.py	封装socket的东西
|--- app01
|	|--- migrations		数据库迁移记录
|	|--- admin.py	后台管理文件
|	|--- apps.py	用来注册app
|	|--- models.py	用来操作数据库
|	|--- views.py	视图函数(url对应的功能函数)
|	|--- tests.py	用来测试代码
|--- templates	存放前端页面文件
|--- manage.py  django项目的启动文件

在django项目中创建的文件夹都必须进行配置。

注册app应用

在settings配置文件中
INSTALLED_APPS里面进行注册
注册app的语法: app名称
'app01.apps.App01Config' ,完整的写法
'app01'			简写