01_Django学习:快速入门

@TOC@TOC

一、Django框架介绍

01_ Django框架概念

  • 软件框架就是为实现或完成某种软件开发时,提供了一些基础的软件产品
  • 框架的功能类似于 基础设施 ,提供并实现最为 基础的软件架构和体系
  • 通常情况下依据框架来实现更为复杂的业务程序开发
  • 二个字,框架就是程序的 骨架

02_Python 中常见的框架有哪些?

  • 大包大揽 Django 被官方称之为完美主义者的Web框架
  • 力求精简 web.py 和 Tornado
  • 新生代微框架 Flask 和 Bottle

03_Django 框架介绍

  • Django 是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计。
  • 由经验丰富的开发人员构建,它负责Web开发的许多麻烦,因此您可以专注于编写应用程序,而无需重新创建轮子。
  • 免费的和开源的
  • 被官方称之为完美主义者的Web框架

04_Django 框架的特点

Django 框架的特点

05_Django 的安装

在线安装Django,指定版本安装 pip install django==2.2

豆瓣源:pip install Django -i https://pypi.douban.com/simple

06_快捷工具

实现python manage.py 自动补齐功能
在这里插入图片描述

二、后台管理

01_项目的创建与运行

项目目录结构如下图:
在这里插入图片描述
目录说明:

  • manage.py :一个命令行工具,可以使你用多种方式对 Django 项目进行交互

内层的目录:项目的真正的Python包

  • __init __.py :一个空文件,它告诉Python这个目录应该被看做一个Python包
  • settings.py :项目的配置
  • urls.py :项目的URL声明
  • wsgi.py :项目与 WSGI 兼容的Web服务器入口

02_应用的创建和使用

1 创建第一个应用程序

Django 自带一个实用程序,可以自动生成应用程序的基本目录结构,因此可以专注于编写代码而不是创建目录。

在一个项目中可以创建一到多个应用,每个应用进行一种业务处理
创建应用的命令:

python3 manage.py startapp bookApp

  1. BookManage中的外部网关接口wsgi.py接收用户请求
  2. 在BookManage/urls.py找到用户请求路径/book,以book开头的,读取bookApp中的子urls
  3. bookApp中的子urls中的book后未接其他,执行index视图函数
  4. view.py显示

2 路由规则

在BookManage/urls.py添加一条 url 规则
在这里插入图片描述

from django.contrib import admin
from django.urls import path, include

from bookApp.views import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/', include('bookApp.urls')),

]

在 bookApp 目录中创建一个为 urls.py
在这里插入图片描述

from django.urls import path

from bookApp import views

urlpatterns = [
    path(r'', views.index, name='index'),
]

3 编写视图函数

打开文件 bookApp/views.py 并放入以下Python代码
在这里插入图片描述

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.

def index(request):
    print("用户请求的路径:;", request.path)
    return HttpResponse('<h1 style="color:green">图书管理系统</h1>')

4 效果展示

启动服务器

python3 manage.py runserver

访问 url 地址: http:// 127.0.0.1:8000/book/ 如果看到主页内容 图书管理系统 即成功。
在这里插入图片描述

03_项目的数据库模型

1 创建数据库模型

models.Model
生成对应的数据库表 数据库表名为数据库名_类名
数据库表中默认存在id信息
在这里插入图片描述

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
        
# 自定义对应的表名,默认表名:bookApp_book
    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/
    # 自定义对应的表名,默认表名:bookApp_hero
    class Meta:
        # 单数时显示的名称
        verbose_name = "人物管理"
        # 复数时显示的名称
        verbose_name_plural = verbose_name

在这里插入图片描述
在这里插入图片描述

2 生成数据库表

激活模型:编辑 BookManage/settings.py 文件,将应用加入到 INSTALLED_APPS 中
在这里插入图片描述
生成迁移文件

python manage.py makemigrations

产生的迁移文件如下:在这里插入图片描述
执行迁移

python manage.py migrate

Datebase产生以下文件
在这里插入图片描述

4 数据库模型基本操作

进入交互式的Python shell,并使用 Django 提供的免费 API

python manage.py shell

引入需要的包:

from bookApp.models import Hero, Book

  1. 查看操作
    查询所有图书信息:

Book.objects.all()

在这里插入图片描述

  1. 添加数据
    在这里插入图片描述
    在这里插入图片描述
  2. 搜索查看

在这里插入图片描述

  1. 删除

在这里插入图片描述

  1. List item
    创建关联对象

from bookApp.models import Hero, Book
from datetime import date

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
接4.自定义模型加入后台管理

三、启用后台Admin 站点管理

双击db.sqlite3
在这里插入图片描述

数据库检测连接(只需要一个就可,此操作为当db为空,下载插件)
在这里插入图片描述
在这里插入图片描述

01_数据库迁移

使用这些 Django 自带的应用程序,需要我们在数据库中创建一些数据表对应,然后才能使用它们。

在终端terminal执行:

python manage.py makemigrations
python manage.py migrate
在这里插入图片描述

02_创建管理员用户

在终端terminal执行

按提示输入用户名、邮箱、密码
python manage.py createsuperuser

启动服务器,通过 “127.0.0.1:8000/admin” 访问,输入上面创建的用户名、密码完成登录

进入管理站点,默认可以对 groups、users 进行管理
在这里插入图片描述

03._管理界面本地化

编辑 settings.py 文件,设置编码、时区

LANGUAGE_CODE = ‘zh-Hans’
TIME_ZONE = ‘Asia/Shanghai’

在这里插入图片描述
接后台管理

04_自定义模型加入后台管理、自定义管理页面

自定义模型加入后台管理

打开 bookApp/admin.py 文件,注册模型

from django.contrib import admin 
from models import Book 
admin.site.register(Book)

加入自定义管理页面后:如下所示

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.

#关联对象
#admin.StackedInline : 内嵌关联注册类
#admin.TabularInline : 表格 关联注册类
class HeroInline(admin.StackedInline):
    model = Hero
    extra = 3

# 书籍自定义管理页面
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)

列表页属性

  • list_display:显示字段,可以点击列头进行排序
 list_display =  ['id', 'name', 'gender']
  • list_filter:过滤字段,过滤框会出现在右侧
list_filter = ['gender']
  • search_fields:搜索字段,搜索框会出现在上侧
search_fields = ['name', 'content']

  • list_per_page:分页,分页框会出现在下侧
list_per_page =  5

添加、修改页属性

  • fields:属性的先后顺序
fields = ['name', 'gender']
  • fieldsets :属性分组, 注意: fields和fieldsets 只能设置一个.
fieldsets = [('必填信息', {'fields': ['name', 'book_id']}),
                 ('选填信息', {'fields': ['gender', 'content']}), ]

关联对象
对于 Hero 模型类,有两种注册方式

  • 方式一:与 Book 模型类相同
  • 方式二:关联注册

admin.StackedInline : 内嵌关联注册类
admin.TabularInline : 表格 关联注册类

#关联对象
#admin.StackedInline : 内嵌关联注册类
#admin.TabularInline : 表格 关联注册类
class HeroInline(admin.StackedInline):
    model = Hero
    extra = 3

在这里插入图片描述

四、Django快速入门: 前台管理

01_URLconf 路由管理

  • 在 Django 中,定义 URLconf 包括正则表达式、视图两部分 。
  • Django 使用正则表达式匹配请求的URL,一旦匹配成功,则调用应用的视图 。
  • 注意:只匹配路径部分,即除去域名、参数后的字符串 。
  • 在主配置文件中添加子配置文件,使主 urlconf 配置连接到子模块的 urlconf 配置文件 。

BookManage/urls.py

from django.contrib import admin
from django.urls import path, include

from bookApp.views import index

urlpatterns = [
    path('admin/', admin.site.urls),
    # 当用户请求路径为/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'),
    # 显示书籍的详情页, 接收一个int值并赋值给id
    path(r'<int:id>/', views.detail, name='detail'),
]

02_视图函数处理业务逻辑

  • 在 Django 中,视图对WEB请求进行回应( response )。
  • 视图接收 reqeust 请求对象作为第一个参数,包含了请求的信息 。
  • 视图函数就是一个Python函数,被定义在 views.py 中 。
  • 定义完成视图后,需要配置 urlconf ,否则无法处理请求。
    bookApp/views.py
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.

# 视图: 对用户的请求(request)进行业务逻辑操作,最终返回给用户一个响应(response).
from bookApp.models import Book


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})

def detail(request, id):
    """书籍详情页信息"""
    book = Book.objects.filter(id=id).first()
    heros = book.hero_set.all()
    return render(request, 'book/detail.html',
                  {'book': book, 'heros': heros})

主页与详情页前端HTML设计
在templates中建立book文件夹,在book文件夹里建detail.html和index.html
在这里插入图片描述

detail.html内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>{{book.name}}</h1>
<h1>{{book.pub_date}}</h1>
<h1>{{heros}}</h1>
</body>
</html>

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>#}
         <li><a href="/book/{{ book.id }}/">{{ book.name }}</a></li>
    {% endfor %}
</ul>
</body>
</html>

03_模板管理实现好看的HTML页面

1. 模板语法: 变量

变量输出语法

{ { var } }
  • 当模版引擎遇到一个变量,将计算这个变量,然后将结果输出。
  • 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。
  • 当模版引擎遇到点("."),会按照下列顺序查询:
  • 字典查询,例如: foo[“bar”]
  • 属性或方法查询,例如: foo.bar
  • 数字索引查询,例如: foo[bar]
  • 如果变量不存在, 模版系统将插入’’ (空字符串)。

2.模板语法: 常用标签

语法:

{ % tag % }

作用:

  • 在输出中创建文本。
  • 控制循环或逻辑。
  • 加载外部信息到模板中。

for标签:

{% for … in … %}
循环逻辑
{% endfor %}

if标签

{% if … %}
逻辑1
{% elif … %}
逻辑2
{% else %}
逻辑3
{% endif %}

comment标签

{% comment %}
多行注释
{% endcomment %}

include标签

  • 加载模板并以标签内的参数渲染

{% include “base/left.html” %}

url :反向解析

{% url ‘name’ p1 p2 %}

csrf_token 标签

  • 用于跨站请求伪造保护

{% csrf_token %}

五、HTML标签

01_标题标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>标题</h1>
<h2>标题</h2>
<h3>标题</h3>
<h4>标题</h4>
<h5>标题</h5>
<h6>标题</h6>
</body>
</html>

02_列表标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
/* 无序列表 */
<ul>
    <li>book1</li>
    <li>book2</li>
    <li>book3</li>
    <li>book4</li>
</ul>

/* 有序列表 */
<ol>
    <li>book1</li>
    <li>book2</li>
    <li>book3</li>
    <li>book4</li>
</ol>



</body>
</html>

03_图片标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<img src="cat.jpg">
</body>
</html>

04_链接标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="https://www.baidu.com">百度一下</a>
<a href="https://www.baidu.com"><img src="cat.jpg"></a>
</body>
</html>

05_表格标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{# r: row #}
<table border="1">
    <tr>
        <td>主机名</td>
        <td>IP</td>
    </tr>
    <tr>
        <td>localhost</td>
        <td>127.0.0.1</td>
    </tr>
        <tr>
        <td>server1</td>
        <td>127.0.0.1</td>
    </tr>
</table>
</body>
</html>

06_表单标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form>
    用户名: <input type="text" placeholder="username"><br/>
    密码: <input type="password" placeholder="password"><br/>
    <input type="submit" value="登录">
</form>
</body>
</html>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值