• Django的学习笔记


    一、认识Django

    1.基本原理

    Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。

    2.框架

    • 用于创建模型的对象关系映射;
    • 为最终用户设计较好的管理界面;
    • URL 设计;
    • 设计者友好的模板语言;
    • 缓存系统。
      在这里插入图片描述

    二、基本应用结构

    在这里插入图片描述

    (1)配置文件setting

    • BASE_DIR:即为项目所在目录,__file__可以获得当前文件的路径,BASE_DIR的存在使我们项目的可移植性更强。
    • SECRET_KEY:一个特殊的Django安装的密钥,每当使用Django-admin startproject时会自动生成一个。
    • DUBUG:默认值为FALSE,当选择TRUE时,当我们的项目出错时可以使我们看到出错信息,但是为了防止被用户看到或者他人攻击,在项目上线后应改为FALSE。
    • ALLOWED_HOSTS:默认值是一个空列表,列表中的值为哪些域名可以访问我们的Django项目
    • INSTALLED_APPS:安装的APP列表,Django为我们默认添加了一些自带的项目,图片中Users是我自己创建的项目。我们自己创建的APP都要加入这个列表才可以被使用。
    • MIDDLEWARE:这是我们要使用的中间件的列表。
    • ROOT_URLCONF:表示根URLconf的完整Python导入路径的字符串。
    • TEMPLATES:这是对我们的template的选项,template用于存放我们的html文件。详细的选项可以参照DjangoTemplates官方文档。
    • LANGUAGE_CODE:Django项目的语言代码,默认值为en-us也就是英语,这里我选择的是zh-hans也就是我们的汉语。选择之后Django的admin界面就将变为汉语。
    • TIME_ZONE:时区,默认值是UTC。当USE_TZ为TRUE时,无论TZ设置为何值Django都会使用系统默认的时区,例如要使用上海的时区则需将USE_TZ=FALSE,TIME_ZONE=‘Asia/Shanghai’。
    • USE_I18N:国际化,Django允许开发者指定要翻译的字符串,也可以让访问者进行语言选择。
    • USE_L10N:是否选择启用数据的本地化。
    • USE_TZ:TimeZone,如果开启了Time Zone功能,则所有的存储和内部处理,甚至包括直接print显示全都是UTC的。只有通过模板进行表单输入/渲染输出的时候,才会执行UTC本地时间的转换。
    • 通过settings.py默认的选项进行设置就可以启动一个Django项目了,接下来是一些常用的选项。
    • STATIC_URL:静态目录的所有文件,存放css,js等文件。
    • STATICFILES_DIRS:将我们自己的static文件加入static路径。
    • MEDIA_URL:与STATIC_URL类似,存放用户上传的文件。
    • 加入安装的APP列表
      在这里插入图片描述

    (2)URL(路由系统)

    • URL配置(URLconf)就像 Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。
    • 在Django开发中,为使开发更加规范,通常在每个App中设置独立的静态资源和模板文件夹,并添加一个空白的urls.py文件,将属于App的URL都写入到该文件中,而项目根目录的urls.py是将每个App的urls.py统一管理。当程序收到用户请求时,首先在根目录的urls.py查找该URL是属于哪个App,然后在从App的urls.py找到具体的URL信息。

    (3)视图文件views

    • 一个视图函数,简称视图,是一个简单的 Python 函数,它接受 Web 请求并且返回 Web 响应。
    • 响应可以是一个 HTML 页面、一个 404 错误页面、重定向页面、XML 文档、或者一张图片…
    • 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里都可以,只要在 Python 目录下面,一般放在项目的 views.py 文件中。
    • 每个视图函数都负责返回一个 HttpResponse 对象,对象中包含生成的响应。
    • 视图层中有两个重要的对象:请求对象(request)与响应对象(HttpResponse)。

    三、建立一个简单的项目

    1.建立一个HelloWord

    (1)进入虚拟环境

    • 快捷键:win + R
    • 输入命令:cmd
    • 注意:如果所建项目没在桌面,可以进入绝对路径输入命令cmd,直接进入绝对路径环境
      在这里插入图片描述

    (2)建立项目

    • 建立项目的命令django-admin startproject helloWorld
    • 进入激活环境:activate dj
    • 转换路径,用cd 进入helloWorld
      在这里插入图片描述
    • 开启后台服务器:python manage.py runserver
      在这里插入图片描述
    • 访问服务器,运行结果:
      在这里插入图片描述

    2.数据库的配置

    (1)从helloword项目中访问页面

    • 打开浏览器,访问http://127.0.0.1:8000/,你将看到Django的火箭欢迎界面
      在这里插入图片描述

    (2)虚拟环境下安装pymysq

    • 首先,在Python虚拟环境下安装pymysql:pip install pymysql。
    • 修改配置文件settings.py
      在这里插入图片描述
    • NAME:为你自己mysql数据库中的库名,如果没有自己创建,名字自己起。
    • USER:为你自己电脑mysql的用户名
    • PASSWORD: 为你自己的mysql密码
      其他不用改

    3.数据的迁移

    • 命令行输入:python manage.py makemigrations
      在这里插入图片描述
    • Myapp目录下面多令一个migrations目录:
      在这里插入图片描述
    • 输入 python manage.py migrate
      在这里插入图片描述
    • 查看数据库:
      在这里插入图片描述

    4.创建超级用户

    (1)注册超级用户

    • 输入命令:python manage.py createsuperuser
    • 跟这命令输入用户名,邮箱,密码
    • 这里的密码至少要8个字符
    • 当出现了superuser created successful时创建成功。
    • 超级用户可以定义多个。
      在这里插入图片描述

    (2)开启服务器,登录后台

    • 输入创建的用户名和密码进行登录

    在这里插入图片描述

    • 登录以后会出现以下界面:
      在这里插入图片描述

    (3)将服务器语言换成中文

    • 在配置文件中进行更改:
      在这里插入图片描述
    • 保存后再次刷新页面:
      在这里插入图片描述

    5.实现界面跳转

    在这里插入图片描述

    (1)创建一个app

    • 命令行输入:python manage.py startapp myapp article
      在这里插入图片描述
    • 打开pycharm会发现多了很多文件:
      在这里插入图片描述

    (2)建立模型

    • 定义标题和内容
    • max_length指定标题的长度不能超过30
    • TextField 是用于大尺寸文本的大型文本字段。 TextField 通常用于存储段落和所有其他文本数据。此字段的默认表单小部件是 文本区域。
    • TextField 采用变长存储,存储内容为:实际大小 + 长度记录位。
      在这里插入图片描述

    (3)安装的APP列表

    在这里插入图片描述

    6.在后台服务器创建问题内容

    在这里插入图片描述

    在这里插入图片描述

    • 创建三个问题
      在这里插入图片描述

    四、模板显示内容

    1.通过一个处理方法获取文章唯一标识

    (1)修改article文件下的view文件

    在这里插入图片描述

    (2)编辑总路由url

    • int是定义一个整数类型的变量
    • 第三个变量是别名
      在这里插入图片描述
    • 开启后台服务器:http://127.0.0.1:8000/admin/article/1
    • 查看效果:
      在这里插入图片描述

    2.模型object是获取模型的对象

    在这里插入图片描述

    3.建立一个templates文件夹

    在这里插入图片描述

    在这里插入图片描述

    4.在文件夹下面建立一个article_detail

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
        <h2>{{ article_obj.title }}h2>
        <p>{{ article_obj.content }}p>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.修改视图文件

    (1)get_object_or_404:

    • 我们原来调用django 的get方法,如果查询的对象不存在的话,会抛出一个DoesNotExist的异常

    (2)context:

    • 将内容返回到一个字典当中

    (2)render_to_response与render

    • 使用的render_to_response是简化的写法,这里考虑到有些版本的问题用不起,我们可以用render来代替
    • 相同点:都是展示模板页面的。
    • 不同点:render 方法可接收三个参数,一是request参数,二是待渲染的html模板文件,三是保存具体数据的字典参数。它的作用就是将数据填充进模板文件,最后把结果返回给浏览器。render 自动使用RequestContext,而 render_to_response 需要 coding 进去。
      在这里插入图片描述

    4.获取文章列表

    在这里插入图片描述

    (1)在视图文件中加入list

    在这里插入图片描述

    (2)建立article_list.html

    • 用(a href 来连接到目录,实现点击目录的跳转)
    • pk是主键
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <body>
        {% for article in articles %}
    { article.id }}">{{ articles.title }}这是其中一种方法-->
        <a href="{% url 'article_detail' article.pk %}">{{ articles.title }}a>
        {% endfor %}
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 备注:如果出现endfor的错误,这里就需要注意空格的问题。
      在这里插入图片描述

    (3)编辑路由url

    在这里插入图片描述

    (4)最终实现效果:

    在这里插入图片描述

    5.建立分路由

    在这里插入图片描述

    • 当建立的文件变多了的时候,分路由就变得很重要了。
    • 如果把链接都写到同一个文件中会变得繁杂,这时候就需要建立分路由。
    • 在article的APP中建立urls

    (1)修改总路由

    在这里插入图片描述

    (2)分路由编辑

    from django.urls import path
    from . import views
    
    urlpatterns = [
        # localhost:8000/artical/
        path('', views.article_list, name="article_list"),#第三个参数name是别名
        # localhost:8000/artical/1
        path('', views.article_detail, name="article_detail"),  # 第三个参数name是别名
    
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 运行服务器,实现的效果是一样的

    五、定制后台和修改模型

    设置模型__str__
    定制admin

    1.创建类

    • list_display和get_list_display(self,request)返回是一个tuple或list,如果子类需要进行修改请使用list。每个元素都是一个字符串。
      在这里插入图片描述

    • 在网页中显示出标题和内容
      在这里插入图片描述

    • 在list_disolay中增加一个id属性

    • 刷新页面查看结果:
      在这里插入图片描述

    • 这里的id是按照倒叙排序的

    • 这里可以通过ordering命令来实现排序功能:
      ordering = (“id”,)

    • 如果是倒叙的话在id里面加一个负号:ordering = (“-id”,)

    2.修饰类

    • 基本格式:@admin.register(Article)
    • register()中对应的内容是模型注册对应的类
    from django.contrib import admin
    from .models import Article
    
    # Register your models here.
    admin.site.register(Article)
    
    
    @admin.register(Article)
    class ArticleAdmin(admin.ModelAdmin):
        list_display = ("id", "title", "content", "created_time")
        ordering = ("id",)
    
    # admin.site.register(Article, ArticleAdmin)第一种写法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3.修改模型要更新数据库

    在这里插入图片描述

    (1)对db.sqlite3进行备份

    在这里插入图片描述

    (2)TextField

    TextField 是文本输入组件,即输入框,常用组件之一。

    (3)在模板中创建DateTimeFiled

    • DateTimeFiled创建日期时间
      在这里插入图片描述

    (4)进行数据库迁移

    • 在虚拟环境中输入命令:
      python manage.py makemigrations
    • 这时会出现select an option的提示,这个指我们创建的字段没有设置默认值,需要进行创建,这里有两种方法。
      在这里插入图片描述
    1)方法一
    • 直接输入默认值1
      在这里插入图片描述
    • 需要设置当前时间区域,直接输入timezeon.now
    • 输入命令:python.manage.py migration
      在这里插入图片描述
    • 运行服务器查看效果:
      在这里插入图片描述
    2)方法二
    • 在model中设置日期时间的默认值:
      default = timezeon.now
    • 输入迁移命令直接迁移:
      python manage.py makemigrations
    • 这里需要把用第一种方法的数据库先进行删除之后在迁移。
      在这里插入图片描述
    • 设置日期行为参数:
      在这里插入图片描述
    • 当它形成的时候自动添加当前的时间
    • 创建数据库迁移文件:
      python manage.py makemigrations
      在这里插入图片描述
    • 输入默认值和timezeon.now
    • 迁移成功:python.manage.py migration
      在这里插入图片描述
    • 运行后台显示效果:
      在这里插入图片描述

    4.更新日期

  • 相关阅读:
    产品经理需求文档(PRD)怎么写?
    Docker 大热,还不了解 Dockerfile 你就OUT啦~
    设计一个支持多版本的APP的后端服务
    【linux网络】IO多路复用select、epoll的区别,含示例代码
    Linux项目自动化构建工具:make/Makefile
    Java学习之方法重写/覆盖
    一场先进技术与先锋企业碰撞的知识盛宴!弘玑Cyclone『超级自动化的数字内生力量』CXO私享会成功举办
    TCP数据报结构分析(面试重点)
    learn掩码张量
    @ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常
  • 原文地址:https://blog.csdn.net/m0_66295378/article/details/128132746