Django框架之初识

前言


1. 什么是Web应用程序?

通过Web访问的应用程序,用户只需要有浏览器即可,不需要再安装其他软件

应用程序有两种模式:

C/S:C/S是客户端/服务器端程序,也就是说这类程序一般独立运行

B/S:浏览器端/服务器端应用程序,一般借助IE等浏览器来运行;本质上其实也是c/s架构

Web应用程序首先是“应用程序”,又有自己独特的地方:基于Web的,典型的浏览器/服务器架构的产物;即B/S模式。

2. HTTP协议

也称为超文本传输协议:规定了客户端与服务端消息传输的格式

1)HTTP协议的四大特性:

1.基于TCP/IP协议,作用于应用层的协议
2.基于请求响应:一次请求对应一次响应,服务器不会主动发数据
3.无状态:不会保留客服端状态
4.无链接:请求一次,响应一次,http断开链接(websocket补丁)

2)数据之请求响应

数据格式之请求:

请求首行
请求头(一堆k,v键值对)
(这里有个空行)
请求体(post请求携带的数据)

数据格式之响应:

响应首行
响应头(一堆k,v键值对)
(这里有个空行)
响应体(post请求携带的数据)

3)响应状态码(status Code)

1xx:服务器已经成功接收到你的数据,正在处理,你可以继续提交其他数据
2xx:请求成功,服务器已经将你请求的数据发送给你了
3xx:重定向
4xx:请求资源不存在
5xx:服务器错误(如服务器崩)

3. 动静态网页

1)静态网页

页面上的数据都是固定写死的

2)动态网页

后端获取数据库数据然后传递给前端页面,页面上的数据是从后端动态获取的
如后端获取当前时间

4. 模板渲染

后端生成的数据直接传递给前端页面使用(前端页面可以灵活的操作改数据)

>>> 通过模板语法实现,依赖于第三方模块jinja2

1)导入第三方模块

命令行:pip install jinja2

2)模板语法

jinja2支持前端直接使用,类似于python的语法操作数据

<!--使用字典-->
<p>{{ user_dic }}</p>
<p>{{ user_dic.name }}</p>
<p>{{ user_dic[‘password‘] }}</p>
<p>{{ user_dic.get(‘name‘) }}</p>

<!--循环取值-->
{% for user in user_dict %}  <!--[{},{},{},{}]-->
    <tr>
        <td>{{ user.id }}</td>
        <td>{{ user.name }}</td>
        <td>{{ user.password }}</td>
    </tr>
{% endfor %}

5. django的进化过程

import socket

server = socket.socket()  # 不传参数默认就是TCP协议
server.bind((‘127.0.0.1‘, 8080))
server.listen(5)

while True:
    conn, addr = server.accept()  # 阻塞 等待客户端链接 # 信息被发到内存
    data = conn.recv(1024)  # 向计算机内存要数据
    conn.send(b‘HTTP/1.1 200 OK\r\n\r\n‘)
    print(data)
    # 手动处理http数据获取用户访问的路径
    current_path = data.decode(‘utf-8‘).split(‘\r\n‘)[0].split(‘ ‘)[1]
    if current_path == ‘/index‘:
        # conn.send(b‘<h1>index</h1>‘)  # 路由匹配上之后返回index
        with open(‘index.html‘,‘rb‘) as f:
            conn.send(f.read())
    else:
        conn.send(b‘404‘)   # 当匹配不上的时候统一返回404
    conn.close()

手录服务端 ↓

基于wsgiref模块:

from wsgiref.simple_server import make_server
from urls import *

def run(env, response):
    response(‘200 OK‘, [(‘username‘, ‘Tom‘)])
    print(env)  # 是个大字典 一堆处理好的键值对
    # 获取用户访问路径
    current_path = env.get(‘PATH_INFO‘)
    # if current_path == ‘/index‘:
    #     return [b‘index‘]
    # elif current_path == ‘/login‘:
    #     return [b‘login‘]
    # 定义一个存储函数名的变量名
    func = None
    # 循环比对路由与视图函数的映射关系
    for url_map in urls:
        if current_path == url_map[0]:
            func = url_map[1]
            # 只要匹配成功,直接结束循环
            break
    if func:
        res = func(env)
    else:
        res = error(env)
    return [res.encode(‘utf-8‘)]

if __name__ == ‘__main__‘:
    server = make_server(‘127.0.0.1‘, 8080, run)
    server.serve_forever()

基于wsgiref的框架

from views import *

urls = [
    (‘/index‘, index),
    (‘/login‘, login),
    (‘/reg‘, reg),
    (‘/get_time‘, get_time),
]

映射关系urls.py

import time

def index(env):
    return ‘index‘

def login(env):
    return ‘login‘

def error(env):
    return ‘error‘

def get_time(env):
    current_time = time.strftime(‘%Y-%m-%d %X‘)
    with open(r‘templates/get_time.html‘, ‘r‘, encoding=‘utf-8‘)as f:
        data = f.read()
    # 是以r模式打开的文件,得到的内容是字符串
    res = data.replace("@[email protected]", current_time)  # 字符串的替换
    return res

def reg(env):
    return ‘reg‘

视图函数views.py

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
@[email protected]
</body>
</html>

templates里面的页面文件get_time.html

基于jinja2模板渲染:

from views import *

urls = [
    (‘/index‘, index),
    (‘/login‘, login),
    (‘/reg‘, reg),
    (‘/get_time‘, get_time),
    (‘/get_user‘, get_user),
]

映射关系urls.py

from jinja2 import Template

def get_user(env):
    with open(r‘templates/get_user.html‘, ‘r‘, encoding=‘utf-8‘) as f:
        data = f.read()
    tmp = Template(data)
    # 将字典传递给前端页面,前端通过变量名user_dic就可以获取到该字典
    return tmp.render(user_dic={‘name‘: ‘jason‘, ‘password‘: ‘123‘})

视图函数views.py添加的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<p>{{ user_dic }}</p>
<p>{{ user_dic.name }}</p>
<p>{{ user_dic[‘password‘] }}</p>
<p>{{ user_dic.get(‘name‘) }}</p>
</body>
</html>

templates的页面文件get_user.html

模板渲染数据库信息:

from views import *

urls = [
    (‘/index‘, index),
    (‘/login‘, login),
    (‘/reg‘, reg),
    (‘/get_time‘, get_time),
    (‘/get_user‘, get_user),
    (‘/get_db‘, get_db),
]

映射关系urls.py

import pymysql

def get_db(env):
    # 链接数据库,获取数据,渲染到前端页面
    conn = pymysql.connect(
        host=‘127.0.0.1‘,
        port=3306,
        user=‘root‘,
        password=‘123‘,
        database=‘6m5d‘,
        charset=‘utf8‘,
        autocommit=True
    )
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    cursor.execute("select * from django3")
    user_dict = cursor.fetchall()  # [(),(),()]
    with open(r‘templates/get_db.html‘, ‘r‘, encoding=‘utf-8‘) as f:
        data = f.read()
    tmp = Template(data)
    return tmp.render(user_dict=user_dict)

视图函数views.py添加的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <table class="table table-hover table-striped table-bordered">
                <thead>
                    <tr>
                        <th>web框架</th>
                        <th>socket</th>
                        <th>路由与视图函数</th>
                        <th>模板渲染</th>
                    </tr>
                </thead>
                <tbody>
                    {% for user in user_dict %}
                        <tr>
                            <td>{{user.web}}</td>
                            <td>{{user.socket}}</td>
                            <td>{{user.rout}}</td>
                            <td>{{user.template}}</td>
                        </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</div>
{{ user_dict }}  <!--[(),(),()]-->

</body>
</html>

templates页面文件get_db.html

6.什么是Web框架?

a:socket

b:路由与视图函数

c:模板渲染

7.python三大主流框架

Django:大而全,自带了很多功能模块,类似于航空母舰 (缺点:有点笨重)

Flask:短小精悍,自带的功能模块特别少,大部分都是依赖于第三方模块(小而轻)

Tornado:异步非阻塞;主要用在处理高io、多路复用的情况,可以写游戏后端

web框架 socket 路由与视图函数 模板渲染
Django wsgiref self self
Flask werkzeug self jinja2
Tornado self self self

新建项目注意事项:**********

1.计算机的名称不能有中文
2.项目名不能起中文(可能乱码,无法执行)
3.一个pycharm窗口就是一个项目,不要多个项目放在一个窗口里面

Django简介


1.版本问题

Django官网

LTS版本支持更新并提供技术帮助,推荐使用带LTS版本

命令行pip3 install django==1.11.11

推荐直接在Pycharm为我们提供的terminal终端下输入此命令,之后pycharm自动处理

2. 验证是否下载成功

django-admin

3. 创建Django项目的方式

1)方式一:命令行创建

创建 Django 项目:

django-admin startproject 项目名

创建 app 应用

python3 manage.py startapp app01

启动Django项目

python3 manage.py runserver

注意:用命令行创建django默认不会自动创建templates文件夹,需要你手动自己创建(注意改文件夹路径是否被添加配置文件中)

2)方式二:pycharm创建

FILE >>> new project  选择第二个django 需要注意名字不能有中文,选择本地的解释器,勾选后台管理
创建app:

pycharm命令行:

python3 manage.py startapp app01

Tools下面run manage task 功能栏

启动点绿色的小按钮

注意:1.用django一定要保证只有一个在运行状态  切记切记!!!

2.一定记得清浏览器的缓存

4.app(应用)的概念

一个app项目相当于一个工厂,app就是里面的生产线

新创建的app需要在配置文件中注册才能生效

INSTALLED_APPS = [
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘app01.apps.App01Config‘  # 全称
    ‘app01‘   # 简写(任选一个)
]

5. django各个文件的作用

应用名

migrations 数据库迁移记录相关数据
admin.py   Django后台管理相关
models.py  模型表相关
views.py   视图函数

项目名

settings.py  配置文件
urls.py     路由与视图函数的映射关系

templates

存放项目的所有页面文件(.html)

manage.py

Django入口文件

6. django小白必会

from django.shortcuts import render, HttpResponse, redirect

HttpResponse  返回字符串

redirect     重定向(路径)

render       返回 HTML页面

render两种给前端页面传值的方式:

# 第一种方式:传递需要的变量
def reg(request):
    user_dict = {‘name‘: ‘Tom‘, ‘password‘: ‘123‘}
    return render(request, ‘reg.html‘, {‘user_dict‘: user_dict})

# 第二种方式:传递所有产生的变量
def reg(request):
    user_dict = {‘name‘: ‘Tom‘, ‘password‘: ‘123‘}
    return render(request, ‘reg.html‘, locals())

7.关于重启客服端

一般情况下,修改了代码,就需要重启服务端

django识别到你的代码变化之后会自动重启,但有时候反应速度比较慢
这时候,可以手动重启,也可以多刷新几次浏览器

原文地址:https://www.cnblogs.com/zhouyongv5/p/10979789.html

时间: 2024-10-20 01:55:52

Django框架之初识的相关文章

Django框架学习-01Django介绍

01-Django介绍 02-HTTP协议介绍 01-Django介绍 1.什么是Web框架? 随着Web最新发展趋势的不断升级,Web项目开发也越来越难,而且需要花费更多的开发时间.所以,Web程序员灵活运用Web开发框架显得更为重要. Web框架(Web framework)或者叫做Web应用框架(Web application framework),是用于进行Web开发的一套软件架构.大多数的Web框架提供了一套开发和部署网站的方式.为Web的行为提供了一套支持支持的方法.使用Web框架,

django框架预备知识

内容: 1.web预备知识 2.django介绍 3.web框架的本质及分类 4.django安装与基本设置 1.web预备知识 HTTP协议:https://www.cnblogs.com/wyb666/p/9383077.html 关于web的本质:http://www.cnblogs.com/wyb666/p/9034042.html 如何自定义web框架:http://www.cnblogs.com/wyb666/p/9038644.html 了解cookie和session:https

第三百一十六节,Django框架,中间件

第三百一十六节,Django框架,中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的settings模块中,有一个 MIDDLEWARE变量,其中每一个元素就是一个中间件(也就是一个中间件模块的一个类),如下. settings模块中 #中间件 MIDDLEWARE = [ 'django.middleware.security.Securit

Django框架&lt;一&gt;

Django框架 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 一.django的安装实现和目录介绍 1.django实现流程 django #安装: pip3 install django 添加环境变量 #1 创建project django-admin startproject mysite ---mysite ---settings.p

Django框架

Django框架全面讲解 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 本文将带大家全面了解Django框架,笔者使用的版本为1.10. 1 Django流程介绍 2 Django 基本配置 一.创建django程序 终端命令:django-admin startproject sitename  (在当前目录下创建一个Django程序) I

第三百零三节,Django框架介绍

Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件.并于2005年7月在BSD许可证下发布. 这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的. Django框架,流程图

django框架&lt;二&gt;

django框架:   Models 1.基本创建 Django提供了一个抽象层("Model")的构建和管理Web应用程序的数据. Django使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). 每个模型是一个Python类,子类django.db.models.model 模型中的每个属性代表一个数据库字段. # DEMO class Student(models.Model): name = models.CharField(m

Python学习(三) Django框架简单搭建

为了快速学习Python进行Web的开发,所以我不准备从Python的基础学起,直接从Django框架入手,边学框架边学Python的基础知识. 下面就开始Django的快速开发之旅吧. 关于Django框架1.8的英文文档在其官网上都有,地址 https://docs.djangoproject.com/en/1.8/intro/ Python的开发手册地址:https://pythonspot.com/getting-started/ https://docs.djangoproject.c

使用Django框架实现游戏网站搭建

完整工程链接点击打开链接 上一篇中我们使用了Javascript和Html5实现了弹球游戏,而在本文中我们希望以其为基础实现游戏网站,能够实现用户的注册登录,游戏成绩记录,排名显示,微博分享等功能. 最终效果: 2. 网站的搭建和服务器的搭建 2.1 网站整体构成 网站的搭建我使用django框架. 2.1.1 数据库设计 User: Field Type Null Key Default Description Name Varchar(50) No Primary 用户ID Password