django入门

一.HTTP协议的认识

(一)HTTP协议就是客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。
1.基于 TCP/IP
HTTP是一个属于应用层的面向对象的协议。
HTTP协议工作于客户端-服务端架构上。
2.基于请求-响应模式
浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器根据接收到的请求后,向客户端发送响应信息
(二)HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行
保存
(三)无状态协议解决办法:
通过Cookie
通过Session会话保存
在这里插入图片描述
(四)根据 HTTP 标准,HTTP 请求可以使用多种请求方法。
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
在这里插入图片描述
(五)MVC模式和MTV模式
1.MVC 模式
MVC 就是把Web应用分为模型(M),控制器©和视图(V)三层,他们之间以一种插件式的、松耦合的方式
连接在一起,模型负责业务对象与数据库的映射( ORM ),视图负责与用户的交互(页面),控制器接受用户
的输入调用模型和视图完成用户的请求
在这里插入图片描述
2.MTV 模式
(1)MTV模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,在
Python的世界中,基本(除了Pylons)都使用了 MVC 的变种 MTV (Model Templates View 模型-模板-
视图)。
(2)Django 的MTV分别是值:
M 代表模型(Model): 负责业务对象和数据库的关系映射( ORM )。
T 代表模板 (Template):负责如何把页面展示给用户( html )。
V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
(3)除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处
理,View再调用相应的Model和Template,MTV的响应模式如下所示
在这里插入图片描述

二.Django框架介绍

(一)什么是框架?
软件框架就是为实现或完成某种软件开发时,提供了一些基础的软件产品,
框架的功能类似于 基础设施 ,提供并实现最为 基础的软件架构和体系
通常情况下我们依据框架来实现更为复杂的业务程序开发
二个字,框架就是程序的 骨架
(二)Python 中常见的框架有哪些?
大包大揽 Django 被官方称之为完美主义者的Web框架。
力求精简 web.py 和 Tornado
新生代微框架 Flask 和 Bottle
(三)Django 框架介绍
Django 是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计。
由经验丰富的开发人员构建,它负责Web开发的许多麻烦,因此您可以专注于编写应用程序,而
无需重新创建轮子。
免费的和开源的。
被官方称之为完美主义者的Web框架
官网
(四)Django 框架的特点
快得多,快速将应用程序从概念到完成
安全性好
可拓展性强

三.Django部署

(一)Django 的安装
pip install Django -i https://pypi.douban.com/simple
(二)项目的创建与运行
在这里插入图片描述
在这里插入图片描述
目录说明: manage.py :一个命令行工具,可以使你用多种方式对 Django 项目进行交互
内层的目录:项目的真正的Python包 init.py :一个空文件,它告诉Python这个目录应该被看做一个Python包 settings.py :项目的配置
urls.py :项目的URL声明
wsgi.py :项目与 WSGI 兼容的Web服务器入口
(三)启用后台Admin 站点管理
1.站点分为“内容发布(后台管理)”和“公共访问(前台管理)”两部分
“内容发布”的部分负责添加、修改、删除内容,开发这些重复的功能是一件单调乏味、缺乏创造力
的工作。
因此, Django 会根据定义的模型类完全自动地生成管理模块
2.Django 框架中有一个非常强大的应用功能: 自动管理界面。 常被Web平台管理者使用,去管理整个
Web平台
3.管理员用户
在这里插入图片描述
python manage.py makemigrations #数据库迁移
python manage.py migrate
在这里插入图片描述
import os
在这里插入图片描述
在这里插入图片描述
python manage.py createsuperuser #创建管理员用户
在这里插入图片描述
官网参考
E:\djangoProject>python manage.py runserver 192.168.1.104:8000 &

运行服务时可能会出现的错误,原因计算机名中包含中文名,改成全英文的
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 2: invalid start byte

在这里插入图片描述
在这里插入图片描述
4.编辑 settings.py 文件,设置编码、时区
LANGUAGE_CODE = ‘zh-Hans’
TIME_ZONE = ‘Asia/Shanghai’
在这里插入图片描述
(四)应用的创建和使用
1.创建第一个应用程序
Django 自带一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不
是创建目录。在一个项目中可以创建一到多个应用,每个应用进行一种业务处理
python manage.py startapp bookApp
在这里插入图片描述
2. 编写第一个视图函数

# bookApp/view.py
from django.shortcuts import render

# Create your views here.
# 视图: 对用户的请求(request)进行业务逻辑操作,最终返回给用户一个响应(response).
from django.http import HttpResponse
def index(request):
    print("用户路径",request.path)
    # 返回响应信息
    return HttpResponse("首页信息")

3.路由规则
url() 函数介绍
Django url() 可以接收四个参数,分别是两个必选参数: regex 、 view 和两个可选参数:kwargs 、 name 。
regex : 正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。 view : 用于执行与正则表达式匹配的 URL 请求。kwargs : 视图使用的字典类型的参数。name : 用来反向获取 URL。
(1)子应用少的时候
在这里插入图片描述

from bookApp.views import index
# djangoProject/urls.py
	path('index/', index),

在这里插入图片描述
(2)方便管理的

# djangoProject/urls.py
from django.urls import path, include
	 # 当用户请求路径为/book/时,访问bookApp/urls.py子路由配置文件
	path('book/', include('bookApp.urls')),
# bookApp/urls.py 
from django.urls import path
from bookApp import views
urlpatterns = [
 	# 当用户访问路径是book/, 执行views.index视图函数。
 	path(r'', views.index, name='index'), 
]

E:\djangoProject>python manage.py runserver 192.168.1.104:8000 & #增加文件需要新建服务
在这里插入图片描述
(3)html页面

# bookApp/views.py 
from django.http import HttpResponse
def index(request):
    print("用户路径",request.path)
    # 返回响应信息
    return HttpResponse('<h1>测试网页</h1>')

在这里插入图片描述

from django.http import HttpResponse
def index(request):
    print("用户路径",request.path)
    # 返回响应信息
    return HttpResponse('<h1 style="color:red">测试网页</h1>')

在这里插入图片描述
(五)项目的数据库模型
1.创建数据库模型
本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书、英雄

"""
图书表结构设计: 表名: Book
图书名称: title
图书发布时间: pub_date

英雄表结构设计: 表名: Hero
英雄姓名: name
英雄性别: gender
英雄简介: hcontent
所属图书: hbook
"""
# bookApp/models.py
from django.db import models

"""
名词: 
    ORM(Object Ralational Mapping,对象关系映射)用来把对象模型表示的对象映射到基于S Q L 的关系模型数据库结构中去。
    这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的 SQ L 语句打交道,只需简单的操作实体对象的属性和方法。
一对多关系:外键写在多的一端
book:hero = 1:n
"""
# Create your models here.

# 类对应数据库表, 表名称默认为bookApp_book.
class Book(models.Model):
    # 属性对应数据库表的列名,默认会添加id这一列。
    name = models.CharField(max_length=40, verbose_name="书籍名称")
    pub_date = models.DateField(verbose_name="出版日期")

    # 数据库查询,魔术方法,字符串友好展示, 便于调试代码
    def __str__(self):
        return  self.name

    class Meta:
        # 单数时显示的名称
        verbose_name = "图书管理"
        # 复数时显示的名称
        verbose_name_plural = verbose_name

"""
更多查询操作请参考网址: https://docs.djangoproject.com/zh-hans/3.1/topics/db/queries/
"""
# 类对应数据库表, 表名称默认为bookApp_hero.
class Hero(models.Model):
    # 属性对应数据库表的列名,默认会添加id这一列。
    gender_choice = [
        (1, "男"),
        (2, "女")
    ]
    name = models.CharField(max_length=20, verbose_name="人物名称")
    # 性别只能选择男(1)或者女(2)
    gender = models.IntegerField(choices=gender_choice, verbose_name="性别")  # 1, 2
    content = models.TextField(max_length=1000, verbose_name="人物描述")
    # 外键关联, 如果删除书籍时,相关hero对应的书籍设置为空。
    book_id = models.ForeignKey(Book, on_delete=models.SET_NULL,null=True, verbose_name="书籍id")

    def __str__(self):
        return  self.name

    # Meta选项的更多使用请参考网址: https://docs.djangoproject.com/zh-hans/3.1/ref/models/options/
    class Meta:
        # 单数时显示的名称
        verbose_name = "人物管理"
        # 复数时显示的名称
        verbose_name_plural = verbose_name

在这里插入图片描述
生成数据库表
在这里插入图片描述
python manage.py makemigrations #生成迁移文件:根据模型类生成 sql 语句
在这里插入图片描述
python manage.py migrate #执行迁移:执行 sql 语句生成数据表
在这里插入图片描述
2.数据库模型基本操作
进入交互式的Python shell,并使用 Django 提供的免费 API
python manage.py shell
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改图书信息
book.title = “xxx”
book.save()
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(六)自定义模型加入后台管理和自定义管理页面
打开 bookApp/admin.py 文件,注册模型

from django.contrib import admin
from bookApp.models import  Book,Hero
# 自定义后台站点管理的拓展阅读: https://docs.djangoproject.com/zh-hans/3.1/ref/contrib/admin/
# Register your models here.

# 关联对象
class HeroInline(admin.StackedInline):
    model = Hero
    extra = 3

# Django 提供了 admin.ModelAdmin 类,通过定义 ModelAdmin 的子类,来定义模型在 Admin 界面的显示方式
class BookAdmin(admin.ModelAdmin):
    # 列表页展示的设置
    list_display =  ['id', 'name', 'pub_date']
    list_filter = ['pub_date']
    search_fields = ['name']
    list_display_links = ['name']
    list_per_page =  5
    inlines =  [HeroInline]

class HeroAdmin(admin.ModelAdmin):
    # 列表页展示的设置
    #显示字段,可以点击列头进行排序
    list_display =  ['id', 'name', 'gender']
    
    # 过滤字段,过滤框会出现在右侧
    list_filter = ['gender']
    
    #搜索字段,搜索框会出现在上侧
    search_fields = ['name', 'content']
    
    list_display_links = ['name']
    
    # 分页,分页框会出现在下侧
    list_per_page =  5


    # 增加和编辑页的设置
    fieldsets = [('必填信息', {'fields': ['name', 'book_id']}),
                 ('选填信息', {'fields': ['gender', 'content']}), ]


admin.site.register(Book, BookAdmin)  #注册模型
admin.site.register(Hero, HeroAdmin)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(七) 前台管理
前面主路由和子路由已经配置好了

# 视图函数处理业务逻辑
# bookapp/views.py
def index(request):
    # print("用户请求的路径:", request.path)
    books = Book.objects.all()
    # 返回响应信息
    # return  HttpResponse(books)
    # 渲染: 将上下文context{'books': books}填充到book/index.html代码的过程。
    return render(request, 'book/index.html', {'books': books})
# 模板管理实现好看的HTML页面
# templates/book/index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1 style="color: blueviolet">图书管理系统</h1>
<ul>
    {% for book in books %}
        <li><a href="/book/{{ book.id }}/">{{ book.name }}</a></li>
    {% endfor %}
</ul>
</body>
</html>

在这里插入图片描述
(八)Django请求的生命周期
wsgi : 封装请求后交给后端的web框架( Flask、Django )。
请求中间件: 对请求进行校验或在请求对象中添加其他相关数据,例如: csrf、 request.session 。
路由匹配: 根据浏览器发送的不同 url 去匹配不同的视图函数。
视图函数: 在视图函数中进行业务逻辑的处理,可能涉及到: ORM、Templates 。
响应中间件: 对响应的数据进行处理。
wsgi : 将响应的内容发送给浏览器
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值