当前位置: 首页 > news >正文

做网站厦门/兰州网络推广优化怎样

做网站厦门,兰州网络推广优化怎样,注册有限公司需要什么资料,如何自己做网址Django框架0x00、Django 项目五件套0x01、主要目录配置settings.py0x02、应用创建应用配置应用0x03、视图与路由配置path()函数re_path() 函数0x04、Django数据库-ORM框架Django 数据库配置在 Django 框架中创建模型模型类-常用字段类型模型类-字段选项模型类值-Meta类激活模型…

Django框架

  • 0x00、Django 项目五件套
  • 0x01、主要目录配置
    • settings.py
  • 0x02、应用
    • 创建应用
    • 配置应用
  • 0x03、视图与路由配置
    • path()函数
    • re_path() 函数
  • 0x04、Django数据库-ORM框架
    • Django 数据库配置
    • 在 Django 框架中创建模型
      • 模型类-常用字段类型
      • 模型类-字段选项
      • 模型类值-Meta类
    • 激活模型
      • 执行数据库迁移:
    • ORM-操作
      • ORM 创建数据
      • ORM 查询数据
      • ORM 更新数据
      • ORM 删除数据


系统环境:Django 3.2.4python 3.8.0mysql 5.7


0x00、Django 项目五件套

  • jango的启动服务
python manage.py runserver ip:port
  • Django创建项目
# 在你想创建项目的文件夹下
django-admin startproject '项目名'
  • 创建应用
# 在创建好的 Django 项目的根目录下
python manage.py startapp '应用名'
  • 数据库迁移
python manage.py migrate
  • 数据库表更改
python manage.py makemigrations '应用名'

0x01、主要目录配置

  • 项目文件夹下存在一个同名文件,包含Django项目的主要配置文件
    • settings:Django项目启动的所有配置项
    • wsgi:web服务配置文件
    • urls:主路由配置文件,所有的HTTP请求会先通过这个文件,在进行路由

settings.py

配置项格式规范:大写字母 = ‘’

  • 公有配置:官方提前规定好的 诸多配置
    • 如:BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(file))) 获取当前项目文件根目录。
    • DEBUG
      • True ---- 调式开发模式,Django可以侦测到项目的任何改动,随后立即重启服务;可以生成详细报错页面
      • False ---- 正式启动模式/上线模式
    • ALLOWED_HOSTS:允许访问的请求头范围
      • [*] ---- 允许所有请求
    • INSTALLED_APPS:指定当前项目中安装的应用列表
    • MIDDLEWARE:用于注册中间件
    • ROOT_URLCONF:Django 的主路由文件
    • TEMPLATES:指定模板的配置信息
    • DATABASES:数据库配置
    • LANGUAGE_CODE:Django项目语言 zh-Hans(中文)、en-us(英文)
    • TIME_ZONE:指定当前服务器端时区 UTC(世界标准时间) Asia/Shanghai(中国时区)
  • 自定义配置
    • 避免与公有配置名冲突

0x02、应用

  • Django框架中 项目与应用之间的关系:

一个 Django 项目可以包含多个应用,一个应用可以在多个项目中。

  • 项目是特定网站的配置和应用程序的集合。
  • 应用是可执行某些操作的 web 应用程序。
    在这里插入图片描述
  • polls/migrations:存放数据库模型的迁移文件
  • polls/apps:应用的相关配置
  • polls/models:用来写对象模型(创建数据库表)的文件
  • polls/tests:Django框架 提供的测试模块的入口
  • polls/views:视图函数接口文件
  • polls/urls:作用等同于项目的 urls.py 文件,是应用的路由文件,这个需要自己手动创建

创建应用

# 在创建好的 Django 项目的根目录下
python manage.py startapp '应用名'# ex: polls
python manage.py startapp polls
  • 创建完成后,根目录下会出现应用的文件夹
    在这里插入图片描述

配置应用

settings.py 中进行配置,告知 Django 应用的创建

...
INSTALLED_APPS = ['django.contrib.admin',  # Django项目自带的应用'django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','polls.apps.PollsConfig',  # 自己创建的应用
]
...
  • 在上述 settings.py 文件的配置中,前面的app都属于 Django项目创建时自带的内容,最后一条是当自己创建新的 app时需要手动添加上去的应用。

0x03、视图与路由配置

  • Django 处理浏览器请求流程
    • 1、找主路由配置文件
    • 2、加载文件中的路由配置urlpatterns
    • 3、依次匹配urlpatterns中提前配置好的路由信息
    • 4、匹配成功,则调用对应的视图处理函数
    • 5、匹配失败,404
  • 视图函数 用于接收一个浏览器请求进行处理,并通过HTTPResponse对象返回响应的函数。

settings:ROOT_URLCONF 主路由配置

路由加载path的顺序是由上到下逐步进行。

path()函数

  • 语法:path(route, views, kwargs,name=None)
    • route:以 URL 模式解析字符串,包含四种模式,依次向下选择。
    • views:指定路径所对应的视图处理函数的名称。
    • kwargs:任意关键字参数可以在字典中传递给目标视图。
    • name:为地址起别名,在模板中地址反向解析时使用。
# Django默认配置
path('admin/', admin.site.urls)
# 自行添加配置
path(utl子路径, 项目包结构路径)
  • 当项目足够庞大时会包含或多应用,每个应用下也会包含路由,此时可以利用include()函数去指引主路由将它导向对应应用下的子路由去,即所谓的 分布式路由
# 项目同名文件下的 urls.py文件
path('polls/', include(polls.urls))

在这里插入图片描述

# polls/urls 下的路由
path('', views.index, name="index")
# polls/views.py文件的 index视图函数,name为解析路由时的别名(在url反向解析中会讲到)

在这里插入图片描述

  • path-route 的模式
    • str:匹配除 ‘/’ 之外的非空字符串
      • resource/<str:username> 匹配 /resource/miger
    • int:匹配0或者任何正整数。返回一个int
      • resource/<int:page> 匹配 /resource/100
    • slug:匹配任意有ASCII字母或数字以及连字符和下划线组成的短标签
      • resource/<slug:sl> 匹配 /resource/this-is-django
    • path:匹配非空字段,包括路径分隔符’/’
      • resource/<path:ph> 匹配 /resource/goods/a/b/c

上述转换器后的参数,为所路由的视图函数的参数:username、page、sl、ph等

re_path() 函数

通过设置正则表达式,可以进行更精准的参数匹配。

  • **示例:**只接收 <=2 位数字的计算
urlpatterns=[re_path(r'^(?P<x>\d{1,2})/(?P<method>\w+)/(?P<y>\d{1,2})$', views.caculate, name='caculate'),
]

如上通过命名分组实现正则表达式匹配:

  • (?P<x>\d{1,2}):
    • (?P) 属于命名分组规范;
    • x 表示分组名,也就是接收的参数名;
    • \d{1,2} 属于正则表达式,表示接收2位整数。后面同理。

0x04、Django数据库-ORM框架

ORM(Object Relational Mapping)即 对象关系映射,它开发人员使用类和对象对数据库进行操作,从而避免直接通过SQL语句操作数据库,使开发简洁高效。

  • ORM 与 数据库的对应关系:
    • 类 – 数据表
    • 对象 – 数据行
    • 属性 – 字段

Django 数据库配置

django 支持任何主流的数据库,但每个数据库的配置存在差异,django的数据库配置默认是sqlite,若需要修改为mysql数据库,参考一下操作。

  • 首先需要安装适当的数据库绑定,项目同名文件下的__init__.py中添加如下内容

解决如下报错:
在这里插入图片描述

import pymysql
pymysql.install_as_MySQLdb()
  • 紧接着需要修改settings.py文件中关于DATABASES的设置
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', # 固定写法,django的mysql驱动'NAME': 'GMS', # 数据库名'USER': 'root',  # 数据库的用户名'PASSWORD': 'password',  # 数据库的密码'HOST': 'xxx.xxx.xxx.xxx',  # 所在的ip地址'PORT': 3306,'OPTIONS': {'charset': 'utf8mb4', "init_command": "SET foreign_key_checks = 0;"},'CONN_MAX_AGE': 180,}
}
  • 配置修改完成后,根据django框架项目与应用的特性,新建的django项目默认包含一些应用,这些应用至少使用一个数据库表,因此我们需要在数据库中创建表才能使用他们。django为我们提供了如下的命令,帮助我们自动创建这些表。
python manage.py migrate

在 Django 框架中创建模型

django 框架的每个模型都是由一个类表示,django提供了自己的一套 ORM 规范供使用者使用。

  • 每个模型都被表示为 django.db.models.Model类的子类,类的变量代表模型中的一个数据库字段。
  • 每个字段都由一个Field类的实例表示,如:字符字段–CharField、日期时间–DateTimeField。
  • 每个 Filed 类实例的名称就是字段的名称。如: name=models.CharField(max_length=200) , 则 name 为列名(字段名)
  • 一些 Filed 类有一些必需的参数,如:CharField 实例需要参数 max_length
  • ForeignKey,定义外键关系
# 模型类创建语法
from django.db import models
class 模型类名(models.Model):字段名 = models.字段类型(字段选项)

模型类-常用字段类型

字段类数据库类型描述
BooleanField()tinyint(1)代码中用 TrueFalse 表示
CharField()varchar必须要指定 max_length 参数值
DateField()dateauto_now:每次保存对象时,自动设置该字段为当前时间(取值:True/False);auto_now_add:当对象第一次被创建时自动设置当前时间(取值True/False);default:设置当前时间(取值:字符串格式时间如:‘2019-6-1’)。以上三个参数只能选一个
DateTimeField()datetime(6)表示日期和时间,参数同上
FloatField()double代码中使用小数表示值
DecimalField()decimal(x,y)编程语言中用小数表示该列的值;数据库中使用小数;参数包括:max_digits:位数总数,包括小数点后的位数。该值必须大于等于decimal_placesdecimal_palces:小数点后的数字数量
EmaliField()varchar字符串,Django提供的用于存储邮箱的字段类,可以匹配邮箱。
IntegerField()int整数。
ImageField()varchar(100)在数据库中用于保存图片的路径;属于字符串类型。
TextField()longtext表示不定长的字符数据,用于存储类似文章长度的数据。
更多类型官方文档

模型类-字段选项

字段选项描述
primary_key设置为True,表示该列为主键;不设置则数据库会默认创建一个自增的id字段
blank设置为True,字段可以为空;为False,则字段必填
null设置为True,表示字段为空;为False,建议加入default设置默认值(官方不推荐使用)
default设置所在列的默认值
db_index为True,表示为该列增加索引
unique为True,表示字段值唯一
db_column指定列名;不指定则采用属性名作为列名
verbose_name设置此字段在admin界面上显示名称
更多字段选项官方文档
  • Model 模型示例
from django.db import models# Create your models here.
class Question(models.Model):question_text = models.CharField(max_length=200)pub_date = models.DateTimeField('date published')  # 创建日期时间字段class Choice(models.Model):question = models.ForeignKey(Question, on_delete=models.CASCADE)  # 声明与Question的外键关系choice_text = models.CharField(max_length=200)  # 定义一个叫 choice_text 的字符串类型的字段votes = models.IntegerField(default=0)  # 定义一个叫 votes 的 Int 型字段

模型类值-Meta类

使用内部 Meta 类来给模型赋予属性,Meta类下有很多内建的类属性,可对模型类做一些控制。

from django.db import modelsclass Good(models.Model)name = models.CharField("商品名", max_length=50, default='')price = models.DecimalField('价格', max_digits=7, decimal_places=2, default=0.0)class Meta:db_table = 'good'  # Django ORM默认床架的表明是应用名_模型名

在这里插入图片描述

激活模型

  • 需要我们将应用程序包含在 django 项目中,为此我们需要在 setting.py 文件中的INSTALLED_APPS告知 django 我们的app。

PollsConfig 位于 polls 应用下的 apps.py 文件中,是创建应用时自动生成的内容。

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','polls.apps.PollsConfig',  # 添加的内容
]
  • 模型更改三步骤:
    • 更改模型(models.py)
    • 为这些更改创建爱你迁移 python manage.py makemigrations
    • 将更改应用到数据库 python manage.py migrate

执行数据库迁移:

  • 当编辑完 models.py 后,我们需要将修改应用到数据库中,这时就需要使用 Django框架的数据库迁移功能。
  • 数据库迁移是 Django同步开发人员对模型所做的更改(添加字段,删除模型等)到数据库的方式。
  • 首先需要生成迁移文件。运行如下命令,会告知 Django 使用者对模型进行了一些更改,并且希望这些更改被应用。会在应用的 migration 文件夹下生成一个迁移脚本文件.

在这里插入图片描述

python manage.py makemigrations
  • 打印模型更改内容(这一步可以省略)。在告知更改后,会产生一个如上所示 0001_initial.py 的文件,通过运行如下命令可以在命令行窗口打印出模型的改变如何应用到数据库中,它并不会去执行这些内容。

在这里插入图片描述

python manage.py sqlmigrate polls 0001
  • 执行迁移脚本程序。在确认没有问题后,我们可以通过运行以下命令,将这些改变真正的应用到数据库中。

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

python manage.py migrate

ORM-操作

  • 基本操作包含增删改查操作,即 CRUD
  • 增加(Create)、查询读取(Read)、更新(Upadte)、删除(Delete)
  • 语法:模型类.管理器对象.操作user.objects.操作

ORM 创建数据

  • 方法一:一步到位(下面将以模型类 user 作为演示)
# user.objects.create(属性1=值1, 属性2=值2, ...) 需要返回一个变量接收返回的实体对象
from userControl.models import userobj = user.objects.create(name='张三', age='20')
  • 方法二:先创建模型,然后操作数据库
# obj = user(属性1=值1, 属性2=值2, ...) 需要返回一个变量接收返回的实体对象
# obj.save()
from userControl.models import userobj = user(name='张三', age='20')
obj.save()  # 当执行save()方法后,才会将数据存入数据库中

ORM 查询数据

Django 为开发人员提供了多种查询方法。

方法Mysql描述
all()SELECT * FROM TABLE查询全部记录,返回 QuerySet 查询对象(集合的元素是模型类的实例化对象)
values(‘列1’, ‘列2’)SELECT 列1,列2 FROM xxx查询指定列的字段值并返回 QuerySet 对象(集合的元素是字典,每个字典代表一条数据)
values(‘列1’, ‘列2’)同上同上,但集合的元素是 元组
order_by(’-列’, ‘列’)会对查询结果根据字段选择性的进行排序,默认按照升序排序,降序排序则需要在列前增加'-'表示;可以和其他方法组合
get(条件)查询符合条件的唯一一条记录,若查询到多个结果,则抛出Model.MultipleObjectsReturned异常;若查询不到结果,则抛异常Model.DoesNotExist
filter(属性1=值1,属性2=值2)属性=值 作为条件,查询符合条件的多条记录
exclude(条件)查询符合条件之外即不包含此条件的全部记录
官方文档

下面图片使用的可能和代码不一样,但具体的效果是一样的,使用的是 Django shell 进行查询。

from userControl.models import userusers = user.objects.all()
print(users)  # 打印出来的是 user实例 的集合如下
for people in users:print('名称:', people.name, '年龄:', people.age)

在这里插入图片描述

users = user.objects.filter(name='zhangsan')
print(users)

在这里插入图片描述

users = user.objects.exclude(name='zhangsan')
print(users)

在这里插入图片描述

  • Django 查询谓词

上述内容根据条件查询,仅仅校验了条件存不存在,但如果是一些需要比较范围的条件,我们该如何进行呢?Django 为我们提供了另一种查询功能,查询谓词

查询谓词使用描述
__exact属性__exact=1等值匹配
__contains属性_contains=‘w’包含指定值匹配
__startswith以 xxx 开始
__endswith以 xxx 结束
__gt & __gte属性_gt=10大于 10 & 大于等于
__lt & __lte属性_lt=10小于10 & 小于等于
__in属性_in=[‘a’, ‘b’, ‘c’]查询数是否在指定范围内
__range属性_range=(30,59)查找数据是否在指定区间范围内即在30~50之间
官方文档

ORM 更新数据

  • 修改单个数据
    • 查:通过 get() 得到要修改的实体对象
    • 改:通过 对象.属性的方式修改数据
    • 存:通过 对象.save() 保存数据
people = Book.objects.get(name='zhangsan')
people.age = 15
people.save()
  • 批量更新数据
    • 直接调用 QuerySet 的 update(属性=值) 实现批量修改
users = user.objects.filter(name__exact='zhangsan')
users.update(age=15)

ORM 删除数据

  • 删除单个数据
    • 查找一个指定数据,然后调用delete()方法删除
people = user.objects.get(name__exact='张三')
people.delete()
  • 批量删除数据
users = user.objects.filter(age__gt=15)  # 年龄大于15岁的人
users.delete()
  • 实际情况

实际项目开发中,通常不会轻易的在业务里把数据真正删掉,取而代之的是做 伪删除 ,即在表中添加一个布尔型字段(is_activate),默认为True;在执行删除操作时,将数据的is_activate字段设置为 False。

在这里插入图片描述

这里还是要题型一下,Django 的字段类型 BooleanField(default=True) 对应的是数据库中的 tinyint类型,Django会自动处理,向数据库中填入 1或0,即 True或False


以上内容只涉及简单的 Django框架,仅适合初学者,通过我的理解重新构造语句方便大家学习,如有欠妥的地方敬请斧正!😁
后续持续更新!⚡️⚡️⚡️

http://www.lbrq.cn/news/1281205.html

相关文章:

  • 东莞品牌整合营销/手机百度关键词优化
  • 旌阳移动网站建设/百度收录网站多久
  • 北海网站建设公司/外贸接单平台哪个最好
  • 河南中恒诚信建设有限公司网站/超级推荐的关键词怎么优化
  • 怎样做后端数据传输前端的网站/电商运营公司简介
  • 网站后台插入程序代码用什么用/推广平台网站
  • 智能小程序app/seo搜索引擎优化薪资水平
  • 做网站哪里好/目前推广平台都有哪些
  • 网站建设需要用到的技术/株洲seo
  • 签订网站制作协议需注意什么/市场调研问卷调查怎么做
  • 想做个网站 怎么做的/厦门网络关键词排名
  • 建设一个农家乐网站/查询域名注册信息
  • 网站建设评比自评情况/免费学生网页制作成品
  • 网站做多个产品/网络seo关键词优化技术
  • 北京网络网站建设价格低/全国新闻媒体发稿平台
  • o2o网站建设市场/seo营销技巧培训班
  • wordpress淘宝客网站模板/商家联盟营销方案
  • 国内开源建站cms/百度指数怎样使用
  • 网站关键词优化合同/上海关键词推广
  • 品牌设计公司排名品牌形象广告/宁波网站推广优化公司电话
  • 网站维护都要做什么/搜索引擎优化培训免费咨询
  • 仿站小工具使用教程/信息流广告优秀案例
  • 高端的平面设计网站/日本进口yamawa
  • 个人网站模板的优缺点/网站ui设计
  • 企业网站建设条件/怎么建网页
  • 凡科做的网站好垃圾/广告外链购买交易平台
  • 重庆网站制作福州/网站建设报价方案
  • 上海专业网站建设服/网络营销与市场营销的区别
  • 看那种片哪个网站好用/电商网站分析
  • 汕头网站快速排名提升/百度指数十年
  • Python|OpenCV-实现快速处理图像的方法(23)
  • Keil MDK 嵌入式开发问题:warning: #223-D: function “sprintf“ declared implicitly
  • B站直播视频 | 深度讲解 Yocto 项目:从历史、架构到实战与趋势
  • CentOS 7 安装 MySQL 8.4.6(二进制包)指南
  • 【科研绘图系列】R语言绘制误差连线散点图
  • Word文档转HTML查看器(字体颜色、字体背景、超链接、图片、目录等全部转换为html),统计Word文档段落数量、图片数量、表格数量、列表数量