看你天赋异禀,这篇Django入门就赠于你了!!!

2023-12-27 04:20

本文主要是介绍看你天赋异禀,这篇Django入门就赠于你了!!!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Django框架入门
    • 【1】软件框架介绍
      • (1)MVC架构
      • (2)Django框架的MVT架构
    • 【2】创建Django项目
      • (1)项目创建
      • (2)创建应用并注册应用app
      • (3)注册应用
      • (4)测试服务器
    • 【3】MVT架构—Model 模型
      • (1)模型—类的设计和表的生成
      • (2)模型—迁移文件
      • (3)模型—执行迁移文件
      • (4)shell中操作数据库表
    • 【4】Django后台管理
      • (1)创建管理员账号
      • (2)修改后台的本地时间和语言
      • (3)注册模型的类到后台
    • 【5】MVT架构—View 视图
    • 【6】MVT架构—Template 模板
      • (1)创建模板
      • (2)视图Views.py调用模板生成HTML页面
      • (3)配置urls.py路由
    • 【7】Django实战—图书人物页面信息
    • 【8】模型 Model 类进阶学习
      • (1)查询
      • (2)模糊查询
      • (3)空查询
      • (4)范围查询
      • (5)比较查询
      • (6)日期查询
      • (7)F对象—两个属性的比较
      • (8)Q对象—可以采用逻辑运算符
      • (9)聚合函数
      • (10)查询集小结
      • (11)模型关系
    • 【9】模板 Templates 知识学习
      • (1)模板语言
      • (2)模板继承
      • (3)CSRF
    • 【10】Cookie和Session
      • (1)cookie/cookies
      • (2)Session
      • (3)小结
    • 【11】网站的登录
      • (1)表单登录
      • (2)Ajax登录

Django框架入门

备注:

  • 【】:主标题
  • ():副标题

github地址:https://github.com/YZYloveTDQ/Django-Book_Manger

在这里插入图片描述




【1】软件框架介绍

一个大的软件是由许多软件模块组成的,每一个软件模块都有其自身的功能,所有功能的组合就完成了一个软件的开发

大项目分解成小的模块,每个模块分配给不同的人去完成


(1)MVC架构

在这里插入图片描述

架构层功能
Model 模型层包含应用程序的核心(数据库记录列表)
View 视图层显示数据(数据库记录)
Controller 控制层数据处理(写入数据库)
  • MVC架构开发的网站功能流程:

(1)用户通过浏览器提交数据给服务器
(2)控制器C 接收数据并处理数据
(3)控制器C 调用 模型M
(4)模型M 将数据保存到数据库
(5)数据库将结果返回给 模型M
(6)模型M 将结果再返回给 控制器C
(7)控制器C 调用 视图V 生成HTML页面
(8)视图V 将HTML页面返回给控制器C
(9)控制器C 将HTML页面返回给浏览器,用户就可以看到了


(2)Django框架的MVT架构

  • Django框架本质上依然沿用MVC架构,只不过名称有所改动:MVT架构

(1)Model 模型:功能与MVC架构中的一致
(2)View 视图:功能相当于控制器C—调用模型M和模板T
(3)Template 模板:功能相当于MVC中的视图V—产生HTML页面

在这里插入图片描述




【2】创建Django项目

  • 参考文章:【Django入门】——通俗易懂的环境搭建步骤

(1)项目创建

  • 项目创建:
>>> django-admin startproject BookManager(项目名)

创建完成后会生成几个文件:
在这里插入图片描述
(1)manage.py:项目运行管理入口
(2)__init__.py:空文件,代表文件夹可以作为python包使用
(3)settings.py:项目的整个配置文件
(4)urls.py:项目的URL路由配置
(5)wsgi.py:项目与WSGI兼容的Web服务器接口(网关接口)
(6)asgi.py:项目部署时的文件


(2)创建应用并注册应用app

  • 创建应用app:
>>>python manage.py startapp Book(应用名)

在这里插入图片描述

一个Django项目由许多应用app组成,每一个应用对应一个功能

  • 应用程序 Book 会生成以下文件:

在这里插入图片描述
(1)admin.py:后台的站点管理文件,管理后台
(2)__init__.py:可以被当作python包
(3)migration文件夹:模型迁移
(4)models.py:MVT架构中的模型M,处理数据
(5)test.py:测试
(6)views.py:MVT架构中的视图V,处理业务逻辑


(3)注册应用

  • 虽然创建了应用,但是要将应用注册到项目中
  • 在项目settings.py文件中,添加我的应用
    在这里插入图片描述

(4)测试服务器

  • Django提供了一个纯 python 编写的轻量级Web服务器(开发使用,非正式server)
>>>python manage.py runserver

在这里插入图片描述




【3】MVT架构—Model 模型

  • ORM(Object - Relation Mapping)对象-关系映射

在许多的框架中,ORM应用广泛,Django中的Model模型也采用了ORM
在这里插入图片描述

models.py 中类生成的对象直接映射成数据库中的表,完成模型设计的同时也完成了数据库设计
在这里插入图片描述

  • 采用ORM优点:

(1)面向对象编写时也面向了数据库编写
(2)不用写复杂的SQL语句
(3)将数据的操作转化为类中的函数和属性

  • 采用ORM缺点:

(1)面向对象编程难免会比直接SQL语句的性能差一些,映射的过程中丧失了性能


(1)模型—类的设计和表的生成

  • 字段类型:

(1)BooleanField:布尔字段
(2)NullBooleanField:Null、True、False三种字段
(3)CharField(max_length=):字符串
(4)TextField:大文本字段,一般大于等于4000个字符
(5)InteerField:整数类型
(6)FloatField:浮点数
(7)DateField(auto_now=False, auto_now_add=False):日期,auto_now代表当前时间用于最后一次修改的时间戳,auto_now_add代表当前时间用于创建的时间戳
(8)FileField:文件类型
(9)ImageField:继承FileField,对上传的内容进行校验,确保是有效的图片

  • BookInfo类:
class BookInfo(models.Model):"""图书模型"""book_title = models.CharField(max_length=20) # 图书名book_date = models.DateField() # 图书出版日期def __str__(self):return self.book_title
  • People人物类:
class People(models.Model):"""人物模型"""name = models.CharField(max_length=20)age = models.IntegerField() # 整数类型people_book = models.ForeignKey('BookInfo', on_delete=models.CASCADE, related_name='book_peoples')def __str__(self):return self.name
  • 外键models.ForeignKey:

(1)产生关联,一本书中会有多个人物,一对多模型
(2)on_delete=models.CASCADE:级联,一个删除另一个也删除
(3)related_name="":反向连接,反向调用时使用


(2)模型—迁移文件

  • 编写完模型中的一个类之后,需要生成迁移文件

即将面向对象编写的程序对应成数据库的表

>>>python manage.py makemigrations
  • 会在migrations文件下生成迁移文件
    在这里插入图片描述

(3)模型—执行迁移文件

  • 已经转化成了数据库对应的表,就要将这个表导入到数据库

实现ORM与数据库的映射

>>>python manage.py migrate

(4)shell中操作数据库表

>>>python manage.py shell
  • 创建时间的写法:
>>> from datetime import date
>>> book.book_date = date(2020, 1, 1)
  • 创建book对象和people对象:

参考:【Django入门】——Python的交互式shell快速尝试试验模型API




【4】Django后台管理

  • 后台管理:

(1)开发网站时,我们往往需要对数据库表中的数据进行增、删、改、查
(2)方便管理
(3)Django中的admin.py用于管理后台


(1)创建管理员账号

  • 创建管理员账号:
>>>python manage.py createsuperuser

运行服务器后(python manage.py runserver)在浏览器网址输入http://127.0.0.1:8000/admin登录进入后台
在这里插入图片描述
在这里插入图片描述


(2)修改后台的本地时间和语言

  • settings.py文件中操作:
# LANGUAGE_CODE = 'en-us' # engilsh
LANGUAGE_CODE = 'zh-hans' # Chinese#TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

(3)注册模型的类到后台

  • admin.py文件中注册模型,这样在管理页面就会出现你的模型
from Book.models import BookInfoadmin.site.register(BookInfo) 
  • 自定义管理页面,显示更多数据
from Book.models import BookInfoclass BookInfoAdmin(admin.ModelAdmin):"""自定义管理页面"""list_display = ['id', 'book_title', 'book_date']# 必须要放在一起注册,因为BookInfoAdmin类中没有模型,不符合Django模型注册规则
admin.site.register(BookInfo, BookInfoAdmin)



【5】MVT架构—View 视图

  • 视图函数:

(1)Django中,通过浏览器去请求一个页面时,视图函数就是那个控制器,视图函数调用模板生成HTML页面,并返回给浏览器
(2)视图函数必须带一个参数:request

  • URL 路由
"""官方例子"""
from Book import viewsurlpatterns = [path('articles/2003', views.函数名, name='……'),path('articles/<int:year>/', views.函数名, name='……'),path('articles/<int:year>/<int:month>/', views.函数名, name='……'),
]

< : >:从URL中提取值

  • urls.py文件:
from Book import viewsurlpatterns = [path('admin/', admin.site.urls),path('index/', views.index, name='index'),path('study/', views.study, name='study'),path('books/', views.show_books, name="show_books"), # 显示图书信息path('books/<int:ID>', views.details_books, name="details_books"),path('area/', views.AreaInfo, name="areas"),path('login/', views.login, name="login"),path('login_submit/', views.login_submit, name="login_submit")
]



【6】MVT架构—Template 模板

(1)创建模板

  • 创建一个模板templates文件夹
    在这里插入图片描述
  • templates文件夹下创建子文件夹Book(名称对应应用名称)
  • settings.py文件中修改TEMPLATES的绝对路径DIRS

(1)修改DIRS,添加templates文件夹的路径
(2)BASE_DIR:项目的绝对路径

TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')], # 模板目录'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]
  • templates文件夹/Book文件夹下创建 index.html 文件
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>小杨</title></head><body><h1>我是小杨我就这样——{{ name }}</h1><hr />{% for i in datas %}<li>{{ i }}</li>{% endfor %}</body>
</html>

(2)视图Views.py调用模板生成HTML页面

  • views.py文件
from django.http import HttpResponse
from django.template import loader
from Book.models import BookInfodef index(request):temp = loader.get_template('Book/index.html') # 加载模板文件,生成一个模板对象context = {'name': '小杨', 'datas': list(range(1, 20))} # 给模板传数据html = temp.render(context) # 渲染模板,生成html页面return HttpResponse(html) # 返回给浏览器html页面es

上述代码等价于:

from Book.models import BookInfodef index(request):return render(request, 'Book/index.html', {'name':'小杨', 'datas':list(range(1, 20))})

视图函数调用模板中的html文件时—利用字典传数据


(3)配置urls.py路由

  • urls.py文件:
from Book import viewsurlpatterns = [path('admin/', admin.site.urls),path('index/', views.index, name='index'),

运行服务器后,在浏览器网址输入http://127.0.0.1:8000/index/
在这里插入图片描述




【7】Django实战—图书人物页面信息

  • 在templates/Book文件夹下创建 books.html 文件和 details.py 文件

  • 在views.py中编写 show_books 函数

  • books.html文件

<! DOCTYPE html>
<html lang='en'><head><meta charset="utf-8"><title>Show Books</title>
</head><body><h1>图书信息如下:</h1><ul>{% for i in books %}<li><a href="{{ i.id }}">{{ i.book_title }}</a></li>{% endfor %}</ul>
</body></html>
  • details.html文件
<! DOCTYPE html>
<html><head><meta charset="utf-8"><title>people_info</title>
</head><body><h1>{{ book.book_title}}:</h1>{% for i in people %}<li>人物名称: {{ i.name }}----年龄: {{ i.age }}</li> {% empty %}<li>无相关信息</li>{% endfor %}
</body></html>
  • views.py文件
def show_books(request):"""显示图书网页"""# 通过模型M查找数据库中的书籍信息book = BookInfo.objects.all()# 把数据返回HTML文件temp = loader.get_template('Book/books.html')context = {'books': book}html = temp.render(context)return HttpResponse(html)def details_books(request, ID):"""显示图书信息"""# 根据ID查找书籍book = BookInfo.objects.get(id=ID)# 根据书籍信息找到人物信息people = book.book_peoples.all()# 返回HTML文件return render(request, "Book/details.html", {"book":book, "people":people})
  • urls.py文件
path('books/', views.show_books, name="show_books"), # 显示图书信息
path('books/<int:ID>', views.details_books, name="details_books"),

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




【8】模型 Model 类进阶学习

  • 模型的类—定义属性:
  • 属性的命名:

(1)不能用python的保留关键字
(2)不允许使用连续的下划线
(3)定义属性时,指明字段类型
(4)属性 = models.字段类型

  • 字段类型:

在这里插入图片描述

  • 选项:
  • 约束字段的选项
    (1)null:如果为True表示允许为空,默认值为False,数据库范畴
    (2)blank:如果为True,则该字段允许为空白,表单验证范畴
    (3)unique:字段唯一性
    (4)db_column:字段的名称,若未指定,则为属性名
    (5)db-column:若为True,则会为字段创建索引
    (6)default:默认值
    (7)primary_key:若为True,则该字段为模型的主键字段;若为Fasle,则一般作为AutoField的选项使用
  • 条件查询——运算符:

(1)等价于实现SQL语句的where功能,调用filter(),exclude(),get()
(2)通过属性__运算符表示外键对应的id值(这里是两个下划线
(3)两个下划线!!!!!!!!!!


(1)查询

"""通过过滤器filter(),指定对象id获取对象"""alist = BookInfo.objects.filter(id=1)

(2)模糊查询

  • 运算符:

(1)contains:是否包含
(2)startswith:指定目标对象的开头字符
(3)endswith:指定目标对象的结尾字符

# 查询书名含有‘无’字的书
alist = BookInfo.objects.filter(book_title__contains="无")# 查询书名开头为‘p’的书
alist = BookFnfo.objects.filter(book_title__startswith="p")# 查询书名结尾是‘敌’的书
alist = BookInfo.objects.filter(book_title__endswith='敌')
  • 以上的运算符都区分大小写

运算符前面加上 i 则不区分大小写:icontains,istartswith,ienswith


(3)空查询

  • 运算符:filter()过滤器
"""isnull是否为空"""# 书名不为空的书
alist = BookInfo.objects.filter(book_title__isnull=False)

(4)范围查询

  • 运算符:filter()
"""in 是否在范围内"""# 查询编号为1、3、5的书
alist = BookInfo.objects.filter(id__in=[1, 3, 5])

(5)比较查询

  • 运算符:filter(),exclude()

(1)gt:大于
(2)gte:大于等于

(1)lt:小于
(2)lte:小于等于

# 查询编号大于3的书
alist = BookInfo.objects.filter(id__gt=3)# 查询编号不等于3的书
alist = BookInfo.objects.exclude(id=3)

(6)日期查询

  • 运算符:filter()

year,month,day

from datetime import date# 查询1980年的书
alist = BookInfo.objects.filter(book_date__year=1980)# 查询1980.1.1之后的书
alist = BookInfo.objects.filter(book_date__gt=date(1980,1,1))

(7)F对象—两个属性的比较

  • F(属性名)
from django.db.models import F# 查询阅读量大于评论量的书(两者都是属性,通过F对象转化可以尽心比较)
alist = BookInfo.objects.filter(b_read__gte=F('b_comment'))# 查询阅读量大于2倍评论量的图书
alist = BookInfo.objects.filter(b_read__gt=F('b_comment')*2)

(8)Q对象—可以采用逻辑运算符

"""多个选项限制"""# 查询阅读量大于20,同时编号小于3的书
alist = BookInfo.objects.filter(b_read__gt=20, id__lt=3)
  • 转化为Q对象后可以采用逻辑运算符

&,|,~

from django.db.models import Q# 查询阅读量大于20,或者编号小于3的书
alist = BookInfo.objects.filter(Q(b_read__gt=20)|Q(pk__lt=3))# 查询编号不为3的书
alist = BookInfo.objects.filter(~Q(pk=3))

(9)聚合函数

  • 使用aggregate()过滤器调用聚合函数

(1)Avg:平均
(2)Max:最大
(3)Min:最小
(4)Sum:总和

from django.db.models import Sum# 计算阅读量的总数
alist = BookInfo.objects.aggregate(Sum('b_read')
# 计算图书总数
alist = BookInfo.objects.count()

(10)查询集小结

  • 从数据库中获取的对象集合

(1)all():返回所有数据
(2)filter():过滤器,返回满足条件的数据
(3)exclude():返回条件以外的数据
(4)order_by():对返回的结果进行排序
(5)get():返回单个条件的对象
(6)count():返回查询结果的总数
(7)aggregate():聚合,返回一个字典
(8)exists():判断是否有数据存在

  • 查询集的2个特点:

(1)惰性执行:创建查询时不会访问数据库,直到调用数据时才会访问数据库
(2)缓存:第一次执行之后会将数据保存到缓存中,下一次直接从缓存读取

# 对数据库进行了两次查询
book.id for book in BookInfo.objects.all()
book.id for book in BookInfo.objects.all()# 只会对数据库进行一次查询,结果保存到缓存中
alist = BookInfo.objects.all()
book.id for book in alist
……
book.id for book in alist
……
  • 限制查询集:

可以对查询集进行切片

alist = BookInfo.objects.all()[0:2]

(11)模型关系

  • 字段:

(1)ForignKey外键: 一对多,将字段定义在多的一端
(2) ManyToManyField: 多对多,字段可以定义在任意一端
(3)OneToOneField: 一对一,字段可以定义在任意一端




【9】模板 Templates 知识学习

在这里插入图片描述


(1)模板语言

  • 变量{{ 变量 }}
{{ book.title }}

相当于字典 book[‘title’]


  • 标签{ % 代码 %}
{% if…… %}
{% elif…… %}
{% else %}

  • 注释
  1. 单行注释:{#……#}
  2. 多行注释:{% comment %}……{% endcomment %}

(2)模板继承

  • 父模板
{% block 模板名称%}
…… {# 预留空白区,可以编写内容也可以不写 #}
{% endblock 模板名称%}
  • 子模板

子模板第一行使用 extend进行继承

{% extend "父模板路径" %}
{% block 模板名称%}
…… {# 实际填充内容 #}
{{ block.super }} {#用于获取父模板中的block内容#}
{% endblock %}

(3)CSRF

  • CSRF(Cross Site Request Forgery 跨站请求伪造):

CSRF指攻击者盗用你的身份,以你的名义发送恶意请求

  • CSRF攻击的罪魁祸首就是:cookie

恶意网站拿到了你的 cookie 之后就可以访问你当前浏览的网站服务器
在这里插入图片描述
在访问当前网站A时,又访问了攻击网站B,这样B就可以获取到你的cookie信息攻击你当前访问的网站




【10】Cookie和Session

  • HTTP无状态保持:

HTTP协议是无状态的,每一次请求都是一次全新的请求,不保存上一次请求的信息

  • HTTP无状态根本原因:

浏览器和服务器之间是使用Socket套接字通信的,响应返回之后,服务器会关闭当前的Socket连接,而且当服务器处理完请求后也会销毁html页面不会保存

为了保持住登录状态,保存浏览信息,采用客户端存储cookie以及服务器端存储session的方法


(1)cookie/cookies

  • cookie 用于保存用户信息等相关数据
  • cookie 信息保存在本地即客户端
  • cookie 信息通常会加密

(1)cookie 是由服务器端生成,发送给浏览器。
(2)浏览器会将 cookie 的 key/value 保存到某个目录下的文本文件中
(3)下一次请求同一网站时就会将 cookie 也发送给服务器用于认证

  • cookie 的特点:

(1)cookie是域名安全的,只针对特定网站
(2)cookie 利用键值对(key/value) 保存信息
(3)每一次浏览器请求服务器时,都会将相对应的 cookie 和请求一起发送给服务器

在这里插入图片描述


(2)Session

  • session主要存储一些安全性比较高的数据,例如账户密码

django 中 session 是默认打开的

  • session存储与服务器端
  • session依赖于cookie

使用session后,会在cookie中保存一个sessionid 的数据,用于高速服务器找到哪个session


(3)小结

1. Cookie

(1)保存在客户端
(2)存储用户信息

2. Session

(1)保存在服务器端
(2)存储安全性要求较高数据
(3)依赖cookie,在cookie中存储一个sessionid数据用于在服务器端找到目标session




【11】网站的登录

  • 网站的登录主要是两种:

(1)表单登录
(2)Ajax登录


(1)表单登录

  • 前端写好 form 表单,从后端的 HTTPrequest 对象里拿到传过来的数据

(1)POST:所传信息保存在请求首部中,适合安全性较高的数据
(2)GET:所传信息显示在url中
例如: www.XXX.com/login? user=XXX && password=XXX

  • 所有的浏览器都支持<form>标签
  • <form>标签用于为用户输入创建HTMl表单,用于传输数据

login.html文件

<!DOCTYPE HTML>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head><meta charset="utf-8"><title>登陆界面</title>
</head>
<body><form method="post" action="/login_submit/">账号:<input ytpe='text' name='username'></br>密码:<input type="password" name="password"></br><input type='submit' value='登录'></form>
</body></html>

在这里插入图片描述


(2)Ajax登录

  • Ajax(Asynchronous Javascript Anderson XML 异步javascript和xml)是指一种创建交互式、快速动态网页应用的网页开发技术

无需重新加载,能够动态更新部分页面
在这里插入图片描述

例如:当登录密码错误需要重新登陆时,不需要重新加载整个页面,只需要重新加载部分页面即可


# 入门没~~~~~~~~~~~

GitHub地址:https://github.com/YZYloveTDQ/Django-Book_Manger

这篇关于看你天赋异禀,这篇Django入门就赠于你了!!!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/541868

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

MySQL入门到精通

一、创建数据库 CREATE DATABASE 数据库名称; 如果数据库存在,则会提示报错。 二、选择数据库 USE 数据库名称; 三、创建数据表 CREATE TABLE 数据表名称; 四、MySQL数据类型 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串类型 4.1 数值类型 数值类型 类型大小用途INT4Bytes整数值FLOAT4By