Django 学习

本文详细介绍了Django框架的使用,从Windows环境的安装、MVC/MTV设计模式,到模型层(ORM)、模板层、数据库操作、CRUD、模型创建、管理器对象等关键概念和操作。此外,还涵盖了Django的数据库配置、模板配置、查询操作、更新与删除、静态文件处理、Shell、模板标签和过滤器、URL配置、视图、响应、会话和Cookie,以及项目开发的基本流程和团队角色分工。
摘要由CSDN通过智能技术生成

点击Django跳到阅读点

Django

下载网站

https://www.python.org/downloads/windows/

Django 是在快节奏的新闻编辑室环境中开发的,所以它旨在使常见的 Web 开发任务变得快速而简单

windows安装

  • 在 Windows 上安装 Python 3.8Django3.2.10

  • 解压Django到文件夹,在进到解压目录,在cmd中运行python setup.py install

  • 等运行完,cmd测试是否成功

  • >python
    Python 3.8.7 
    >>> import django
    >>> django.get_version()
    '3.2.10'
    >>>
    

设计模式与模板层

MVC

MVC代表Model-View-Controller (模型-视图-控制器)模式。

  • M 模型层(Model),主要用于对数据库层的封装
  • V 视图层(View),用于向用户展示结果 (WHAT + HOW )
  • C 控制(Controller ,用于处理请求、获取数据、返回结果(重要)

image-20220102130416726

MTV

核心逻辑代码跳到V中

MTV代表Model-Template-View(模型-模板-视图)模式。

  • M 模型层(Model)负责与数据库交互
  • T 模板层(Template)负责呈现内容到浏览器(HOW)
  • V 视图层(View)是核心,负责接收请求、获取数据、返回结果(WHAT)

image-20220102130750131

M模型层

应用

应用在Django项目中是一个独立的业务模块,

可以包含自己的路由,视图,模板,模型

  • 创建应用文件夹
    • python manage.py startapp name
  • 安装此应用
    • settings.py配置INSTALLED_APPS = [name , … , …]
├─name ''' 小MTV结构 '''
│  │  admin.py	#管理
│  │  apps.py
│  │  models.py	#数据库相关
│  │  tests.py
│  │  views.py	#视图逻辑
│  │  __init__.py
│  │
│  └─migrations  #数据库
│          __init__.py
分布式路由

Django中,

主路由配置文件(urls.py)可以不处理用户具体路由

主路由配置文件的可以做请求的分发(分布式请求处理)。

具体的请求可以由各自的应用来进行处理

创建应用内的URLS
1 主路由中调用include函数,用于
	将当前路由转到各个应用的路由配置文件的urlpatterns进行分布式处理
    include('app名字.url模块名')
    例如:
       path('music/',include(music.urls)),
    
2 setting中添加应用(就是添加目录)
	例如:
    INSTALLED_APPS = [
    'django.contrib.staticfiles',
    'music',]	#否则目录下的模板可能找不到 	
		
3 配置应用内urls.py
	from . import views
	urlpatterns = [
  	  path('admin/', admin.site.urls),
  	  path('index',views.index_view)
	]              
模板

应用内部可以配置模板目录

  • 应用下手动创建templates文件夹
  • settings.py中开启应用模板功能
    • TEMPLATE 配置项中的'APP_DIRS'值为True 即可
  • 应用下templates和外层templates都存在时,django得查找模板规则
    • 1.优先查找外层templates目录下的模板
    • 2.按INSTALLED_APPS配置下的应用顺序逐层查找
TEMPLATES = [
    {
     'APP_DIRS': True, }]
**模型

模型层,与数据库交互

什么是模型?

模型是一个Python类,它是由django.db.models.Model派生出的子类。

  • 一个模型类代表数据库中的一张数据表
  • 模型类中每一个类属性都代表数据库中的一个字段
  • 模型是数据交互的接口,是表示和操作数据库的方法和方式
**ORM框架

ORM (Object Relational Mapping)即对象关系映射,

它是―种程序技术,

它允许你使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库

  • 建立模型类和表之间的对应关系,允许通过面向对象的方式来操作数据库
  • 根据设计的模型类生成数据库中的表格。
  • 通过简单的配置就可以进行数据库的切换
优点:
只需要面向对象编程,不需要面向数据库编写代码.
对数据库的操作都转化成对类属性和方法的操作.
不用编写各种数据库的sql语句.
实现了数据模型与数据库的解耦,屏蔽了不同数据库操作上的差异.
不在关注用的是mysql、oracle...等数据库的内部细节.
简单的配置就可以轻松更换数据库.而不需要修改代码

缺点:
对于复杂业务,使用成本较高
根据对象的操作转换成SQL语句,根据查询的结果转化成对象,在映射过程中有性能损失.

映射关系

ORM DB
数据表
对象 数据行
属性 字段
**模型创建
class模型类名(mode1s.Mode1) :
字段名= models.字段类型(字段选项)

1.创建app
	python manage.py startapp bookstore
    
2.写模型models.py
'''from django.db import models
class Book(models.Model):
    title = models.charFie1d("书名",max_length=50,default=' ')
    price = models.DecimalFie1d('定价',max_digits=7,decimal_places=2,defau1t=0.0)
    '''
    
3.数据库迁移
Django同步对模型所做更改(添加字段,删除模型等)到数据库模式的方式

(1)生成迁移文件-执行
#		python manage.py makemigrations
将应用下的models.py文件生成一个中间文件,并保存在migrations文件夹中

(2)执行迁移脚本程序-执行
#		python manage.py migrate
执行迁移程序实现迁移。将每个应用下的migrations目录中的中间文件同步回数据库

#会生成很多表
Meta类

使用内部 Meta类来给模型赋予属性

Meta类下有很多内建的类性,可对模型类做一些控制

class Book(models.Model):
    ...
    ...
    class Meta:
        db_table='name?'
        ...
**模型使用

修改表结构在models.py中修改

任何关于表结构的修改,务必在对应模型类上修改

修改后

python manage.py makemigrations
python manage.py migrate

T模板层

- 1.模板是可以根据字典数据动态变化的html网页
- 2.模板可以根据视图中传递的字典数据动态生成相应的HTML网页。
模板配置

1.创建模板文件夹<项目名>/templates

2.在settings.py 中 TEMPLATES配置项

如果编译器找不到模板

image-20220106165155227

  • - BACKEND:指定模板的引擎
      - 接受视图,调用视图的实现,默认系统自带
      
    - DIRS:模板的搜索目录
      - 添加上自己创建的模板目录(可以是一个或多个)
      
    - APP_DIRS∶是否要在应用中的templates 文件夹中搜索模板文件
    
    - OPTIONS∶有关模板的选项
    
    配置项中需要修改部分
    设置DIRS 
    - 'DIRS'": [os.path.join(BASE_DIR, 'templates')],
    
加载模板
#template_view

from django.template import loader
#1.通过1oader加载模板‘
t = loader. get_template("模板文件名") #如test.html
# 2.将t转换成HTML字符串
html = t.render(字典数据)
# 3.用响应对象将转换的字符串内容返回给浏览器
return HttpResponse(htm1)

'''
from django.shortcuts import render
return render(request,"test.html",dict)
#请求,网页,字典
'''
#templates/test.html
<--		 可以用{
  {变量名}}来引用模板传入的字典值     /-->
<!DOCTYPE html>
<html lang="zh-Hans">
<head> </head>
<body>
		<h1> 这是模板 </h1>
</body>
</html>
模板变量
def mode_view(request):
    dict={
   
        "fruit":"apple",
        "value":'10'
    }
    return render(request,"test1.html",dict)
传递类型
str int list tuple dict func odj
{
   {
   name}}#(变量名)
{
   {
   name.index}}
{
   {
   name.key}}
{
   {
   name.方法}}
{
   {
   函数名}}
模板标签

作用

  • 将一些服务器端的功能嵌入到模板中,例如流程控制等
标签语法
if标签
{% if 表达式1  %}
.。。
{% elif 表达式2  %}
。。。
{% else 表达式3  %}
...
{% endif %}

for标签
{% for name in list %}
		{
  {name}}
		
		{% endfor %}
过滤器
  • 定义:在变量输出时对变量的值进行处理
  • 作用:可以通过使用过滤器来改变变量的输出显示
  • 语法∶{ { 变量|过滤器1:‘参数值1’|过滤器2:参数值2’…].}}

image-20220102173013191

继承

模板继承可以使父模板的内容重用,子模板直接继承父模板的全部内容并可以覆盖父模板中相应的块

#语法–父模板中:
定义父模板中的块 block标签标识出哪些在子模块中是允许被修改的
block标签:在父模板中定义,可以在子模板中覆盖
block标签外的不能改
    
#语法–子模板中:
继承模板extends标签(写在模板文件的第一行)
例如{
   %extends 'base.html'%}

子模板重写父模板中的内容块

###  block标签  ###
{
   % block block_name %}
子模板块用来覆盖父模板中 block_name块的内容
{
   % endblock block_name %}

静态文件
  • 静态文件配置 settings.py中
配置静态文件的访问路径【该配置默认存在】

#通过哪个url地址找静态文件
 STATIC_URL = '/static/'
 
说明:
指定访问静态文件时是需要通过/static/xxx
或http://127.0.0.1:8000/static/xxx
[xxx表示具体的静态资源位置]

#配置静态文件的存储路径STATICFILES DIRS
STATICFILES_DIRS保存的是静态文件在服务器端的存储位置

STATICFILES_DIRS = (
os.path.join(BASE_DIR,"static"),
)
模板中访问静态文件
- img标签为例

1.<img src=" /static/image/django2.jpg" width="200px"height="200px">

<img src="http://127.0.0.1:8000/static/image/django2.jpg">

2.通过{%static %}标签访问静态文件
加载static - 
#放最上
{% load static %}
使用静态资源– {% static '静态资源路径'%}

样例
<img src="{% static 'images/lena.jpg'%}">
<body style="background-image: url({% static 'img/index.png' %});background-size: cover">

ORM模型CRUD

基本操作包括增删改查操作,即(CRUD操作)
CRUD是指在做计算处理时的增加(Create)、读取查询(Read)、更新(Update)和删除(Delete)
ORM CRUD核心—>模型类.管理器对象(model.object. )

每个继承自models.Model的模型类,都会有一个objects对象被同样继承下来。

这个对象叫管理器对象,数据库的增删改查可以通过模型的管理器实现

数据库设置

打开 mysite/settings.py 。这是个包含了 Django 项目设置的 Python 模块。

  • 使用 SQLite 以外的数据库,请确认在使用前已经创建了数据库。
  • 还要确保该数据库用户具有 “create database” 权限。

Django配置数据库有两种方法

方法一:直接在settings.py文件中添加数据库配置信息

DATABASES = {
   
    # 方法一
    'default': {
   
        'ENGINE': 'django.db.backends.mysql',   # 数据库引擎
        'NAME': 'mysite',                       # 数据库名称
        'USER': 'xiaohong',                      # 数据库登录用户名
        'PASSWORD': 'xiaohong',                # 密码
        'HOST': '127.0.0.1',                # 数据库主机IP
        'PORT': 3306,                           # 数据库端口号
    }
}

`'django.db.backends.sqlite3'`
`'django.db.backends.postgresql'`
`'django.db.backends.mysql'`
`'django.db.backends.oracle'`

直接使用出错误

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?

安装包

pip install pymysql

要在settings.py文件所在包中的__init__.py中导入pymysql

import pymysql
pymysql.install_as_MySQLdb()

如何使用见·模型使用

方法二:将数据库配置信息存到一个文件中,在settings.py文件中将其引入。(推荐)

新建数据库配置文件my.cnf(名字随意选择)

[client]
database = blog
user = blog
password = blog
host =127.0.0.1
port = 3306
default-character-set = utf8

在settings.py文件中引入my.cnf文件

DATABASES = {
   
    # 方法二:
    'default': {
   
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
   
            'read_default_file': 'utils/dbs/my.cnf',
        },
    }
}

字段类型

BooleanField()
	数据库类型:tinyint(1)	--	编程语言中:使用true或False来表示值
	在数据库中:使用10来表示具体的值
        
CharField()
数据库类型:varchar
注意:必须要指定max_length参数值

DateField()
	数据库类型:date		表示日期√参数:
	 auto_now:每次保存对象时,自动设置该字段为当前时间(取值:True/False)
     acto_now_add:当对象第一次被创建时自动设置当前时间(取值:True/False)
     default:设置当前时间(取值:字符串格式时间如: '2019-6-1')。
以上三个参数只能多选一
    
DateTimeField()
数据库类型:datetime(6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值