Django快速入门(一)

Django三板斧

1. 基本使用

三板斧: HttpResponse,render,redirect

from django.shortcuts import HttpResponse,render,redirect# 一. 返回字符串类型的数据
return HttpResponse('字符串')  # 二. 返回HTML文件
# 1. 动态HTML页面: 
return render(request,'login.html')
def ab_render(request):# 视图函数必须要接受一个形参requestuser_dict = {'username':'jason','age':18}# 2. 动态HTML页面'''动态HTML页面的2种模板语法传值方式1) 'data': user_dict  user_dict: 指定需要传给HTML文件的数据data: 在HTML页面中操作的变量2) locals会将所在的名称空间中所有的名字全部传递给html页面传递给html页面的数据这里不仅仅是user_dict, 还有request'''# 第一种传值方式: 更加的精确 节省资源return render(request,'01 ab_render.html', {'data':user_dict,'date':123})   # 第二种传值方式: 当你要传的数据特别多的时候return render(request,'01 ab_render.html',locals())# 三. 重定向    
# 1. 返回他人的网址的重定向
: return redirect('https://mzitu.com')# 2. 返回自己的网址的重定向
return redirect('/index/')

2. 实例

'''views.py文件代码'''from django.shortcuts import HttpResponse, render, redirect# Create your views here.
"""
# urls.py文件url(r'^admin/', admin.site.urls),url(r'http_response_data/', views.http_response_data),url(r'render_data/', views.render_data),url(r'redirect_other/', views.redirect_other),url(r'redirect_self/', views.redirect_self),url(r'book_manage/', views.book_manage),
"""def http_response_data(request):"""HttpResponse 内部传入一个字符串参数,返回给浏览器。:param request:  请求相关的所有数据对象 比你之前的env更加牛逼.之前的env放的是一个大字典, 而我们可以对request使用对象的操作方式`request.`:return:"""print(request.__dict__)       # {..., 'PATH_INFO': '/http_response_data/', ...}print(request.path_info)      # '/http_response_data/'return HttpResponse('返回字符串的数据!')def render_data(request):"""返回HTML文件:param request::return:"""return render(request, 'login.html')def redirect_other(request):"""重定向. 返回他人的网址的重定向:return:"""return redirect('https://www.mzitu.com')def redirect_self(request):"""重定向. 返回自己的网址的重定向:param request::return:"""return redirect('/book_manage')def book_manage(request):return render(request, 'book_manage.html')

静态文件配置

1. 什么是静态文件

# 静态文件(static): js, css, img, 第三方前端框架, ...网站写好的js文件网站写好的css文件网站用到的图片文件第三方前端框架...提示: 只要已经写好功能的文件, 可以拿来就直接使用的文件就属于静态文件# 补充: django默认是不会自动帮你创建static文件夹 需要你自己手动创建 
一般情况下我们在static文件夹内还会做进一步的划分处理static/├── js├── css├── img├── bootstrap-3.3.7-dist├── ....

2. 静态文件配置

强调:在浏览器中输入url能够看到对应的资源, 是因为后端提前开设了该资源的接口, 如果访问不到资源 说明后端没有开设该资源的接口

提示: django项目默认不会帮你创建静态文件, 需要手动创建. 约定熟成文件名为 static

路径: 到settings.py配置文件中找到STATIC_URL在其下面加上以下内容

'''
静态文件查找步骤: 1. 先找到STATIC_URL中拿到 /static/ 令牌2. 再到STATICFILES_DIRS中拼接访问静态文件资源的路径.  os.path.join(BASE_DIR,'static')3. 拿到路径再到我们创建的static静态文件中查找. 一层层查找, 第一个static文件夹中没有, 则到第二个种找, 都没有才会报错.
'''
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static'),os.path.join(BASE_DIR,'static1'),os.path.join(BASE_DIR,'static2'),
]

补充: 当你在写django项目的时候 可能会出现后端代码修改了但是前端页面没有变化的情况

1.你在同一个端口开了好几个django项目 一直在跑的其实是第一个django项目: 因为默认设置的django端口是8000, 端口已经被第一个占用, 后面无论开启多个个django项目端口都不能够分配, 也就无法启动.2. 浏览器缓存的问题打开浏览器 -> settings -> network -> disable cache 勾选上

 

3. 静态文件动态解析

'''
在templates管理的html文件中, 在head引用外部资源之前以如下书写方式:
{% load static %}   # load static 类似于于导入python模块
<script src="{% static '静态文件中的文件路径' %}"></script>
'''
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>

request对象方法初识

1. 知识储备: form表单

form表单功能: 在该form标签内部书写的获取用户的数据都会被form标签提交到后端.
属性: action 控制数据提交到后端的路径(给哪个服务短提交数据)1. 什么都不写. 默认就是朝当前页面所在的url提交数据2. 写全路径: https//:www.baidu.com 朝百度服务端提交3. 只写路径后缀action='/index/'. 自动识别出当前服务端的ip和port拼接到前面. host:port/index/属性: method 通过method指定提交请求的方式1. get: form表单默认提交数据的方式 是get请求  数据是直接放在url后面的. 以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.2. post: 把提交的数据放在HTTP包的请求体中(注意: 这里指定post, flask服务器才可以通过request.files,request.form获取文件,表单数据)提示: GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.属性: enctype="multipart/form-data" 指定数据提交的编码格式1. 默认是urlencoded 只能够提交普通的文本数据, 不能发送文件.2. form-data 就可以支持提交文件数据

2. 注意: 在使用form表单开启post功能之前必须要先到settings.py配置文件中找到MIDDLEWARE注释一行代码

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',# 'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]

3. request用法介绍

 

参数功能介绍: 

'''
提示: get请求携带的数据是有大小限制的, 而post请求则没有限制.
chrome(谷歌)的url长度限制不能超过8182个字符
'''request.method      返回大写字符串格式的当前请求方式request.GET         返回URL中问好后面携带的参数. QueryDict对象: <QueryDict: {'username': ['egon'], 'hobbies': ['play', 'study']}>
request.POST        返回POST请求提交过来的普通键值对(不包含文件)request.GET.get()   返回对象列表中最后一个的值 -> str
request.POST.get()request.GET.getlist()   返回对象列表中所有的值    -> list
request.POST.getlist()

 

 实例:

from django.shortcuts import HttpResponse, render, redirect# Create your views here.
def login(request):"""request对象方法初识"""print(request.method, type(request.method))  # GET <class 'str'>print(request.GET, type(request.GET))'''<QueryDict: {'username': ['egon'], 'password': ['123']}> <class 'django.http.request.QueryDict'>'''print(request.GET.get('username'))      # egonprint(request.GET.get('password'))      # 123print(request.GET.getlist('username'))  # ['egon']return render(request, 'login.html')def register(request):print(request.method, type(request.method))  # POST <class 'str'>print(request.POST, type(request.POST))'''<QueryDict: {'username': ['egon'], 'password1': ['123'], 'password2': ['123'], 'hobbies': ['吃', '喝']}> <class 'django.http.request.QueryDict'>'''print(request.POST.get("username"))     # egonprint(request.POST.get('hobbies'))      # 喝print(request.POST.getlist("hobbies"))  # ['吃', '喝']return render(request, 'register.html')

pycharm链接数据库(MySQL)

可能出现的错误: Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' prope

 

django链接数据库(MySQL)

第一步配置数据库: 到配置文件settings.py中找到DATABASES配置

'''
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','HOST': 'IP地址','PORT': 3306,'USER': '登录用户','PASSWORD': '用户密码','NAME': '库名','CHARSET': 'utf8',}
}
'''DATABASES = {'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),'ENGINE': 'django.db.backends.mysql','NAME': '数据库名','USER': 'root','password': '密码','HOST': '127.0.0.1','PORT': '3306','CHARSET': 'utf8',}
}

第二步代码声明: 使用pymysql替换django自带的数据库模块MySQLdb

'''
没有配置第二步则会抛出异常: django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'.
Did you install mysqlclient or MySQL-python?django默认用的是mysqldb模块链接MySQL
但是该模块的兼容性不好 需要手动改为用pymysql链接
你需要告诉django不要用默认的mysqldb还是用pymysql
'''
# 在项目名下的__init__.py或者任意应用名下书写以下代码:
import pymysql
pymysql.install_as_MySQLdb()

Django ORM

1. ORM简介

 

ORM 全称 object relational mapping 对象关系映射

功能: 通过ORM实现对操作对象的操作模式来操作数据库中的数据

实现: 通过models中的类来对应数据库中的一个表,一个对象对应一个数据行,一个属性对应数据库中的一个字段

缺陷: 封装程度太高, 有时候sql语句的效率偏低 需要你自己写SQL语句

 

2. ORM基本使用

from django.db import models# Create your models here.
class User(models.Model):"""CharField   必须要指定max_length参数不指定会直接报错verbose_name该参数是所有字段都有的 就是用来对字段的解释"""# id int primary key auto_incrementid = models.AutoField(primary_key=True, verbose_name='主键id')# username varchar(32)username = models.CharField(max_length=32, verbose_name='用户名')# age intage = models.IntegerField(verbose_name='年龄')# password varchar(255)password = models.CharField(max_length=255, verbose_name='密码')class Author(models.Model):"""由于一张表中必须要有一个主键字段 并且一般情况下都叫id字段所以orm当你不定义主键字段的时候 orm会自动帮你创建一个名为id主键字段也就意味着 后续我们在创建模型表的时候如果主键字段名没有额外的叫法 那么主键字段可以省略不写"""# username varchar(32)username = models.CharField(max_length=32)# password varchar(255)password = models.CharField(max_length=255)

3. 数据库迁移命令

# 前提: 在执行命令之前要切换到项目文件夹下
python3.6 manage.py makemigrations  # 生成数据库同步脚本(将操作记录, 记录到migrations中)
python3.6 manage.py migrate  # 数据迁移(将操作真正的同步到数据库中)

4. 字段的增删改查

# 增1. 在执行了生成数据库迁移记录命令之后在终端命令行中输入默认值2. 字段设置可以为空(默认不为空)info = models.CharField(max_length=32,verbose_name='个人简介',null=True)        3. 直接给字段指定默认值info = models.CharField(max_length=255, verbose_name='个人简介', default='喜欢吃生蚝!')# 删直接注释对应的字段然后执行数据库迁移的两条命令即可# password = models.CharField(max_length=255, verbose_name='密码')注意(危险):  删除的字段对应的数据也将会删除# 改直接修改代码然后执行数据库迁移的两条命令即可# password = models.CharField(max_length=255, verbose_name='密码')password = models.IntegerField(verbose_name='密码')# 查: 略

 

5. 数据的增删改查

5.1 方法介绍
# 增:方式一: 使用models自动创建  user_obj = models.User.objects.create(**kwargs)方式二: 手动创建user_obj = models.User(**kwargs)user_obj.save()# 查:user_queryset = models.User.objects.filter(**kwargs)user_queryset是一个QuerySet对象. 它是一个列表套数据的对象的格式: <QuerySet [<User: User object>, <User: User object>, ...]># 查询单个数据的2种方式方式一: 索引取值. 不能使用负数.user_obj = user_queryset[0]方式二: 推荐使用.first(). 但是其内部使用的也是通过索引取值user_obj = user_queryset.first()# 查询所有数据的2种方式         方式一:data_queryset = models.User.objects.filter()print(data_queryset)   #  <QuerySet:[<User: object1>, <User: object2>, ...]>方式二: 更加见名知意data_queryset = models.User.objects.all()# 改方式一:'''批量操作对象只会更新指定的. 将filter查询出来的列表中所有的对象全部更新批量更新操作只修改被修改的字段'''models.User.objects.filter(id=edit_id).update(**kwargs)方式二:'''单独操作对象无论有或者没有就是执行更新. 因此当字段特别多的时候效率会非常的低,它会从头到尾将数据的所有字段全部更新一边 无论该字段是否被修改'''edit_obj = models.User.objects.filter(id=edit_id).first()edit_obj.username = usernameedit_obj.password = passwordedit_obj.save()# 删'''真正的删除功能应该需要二次确认, 我们这里先不做.平常的删除数据内部其实并不是真正的删除 我们会给数据添加一个标识字段用来表示当前数据是否被删除了,如果数据被删了仅仅只是讲字段修改一个状态, 标志状态有is_delete, is_alive, is_status. 这里我们用is_delete示例:username       password	       is_deletejason			123				0egon			123				1'''不做2次确认的删除: 直接删除models.User.objects.filter(id=delete_id).delete()   

5.2 利用数据的查询和增加实现登录注册功能实例
# 数据的查询: 登录功能例子from app01 import modelsusername = request.POST.get('username')res = models.User.objects.filter(username=username)'''res=[数据对象1, 数据对象2]  列表取值不能使用负数补充: filter括号内可以带多个参数. 内部默认用and链接'''res = models.User.objects.filter(username=username).first()  # 获取数据对象方式一: 推荐. 内部使用的是下面索引取值的的方式user_obj = res[0]      # 获取数据对象方式一: 推荐. 内部使用的是下面索引取值的的方式user_obj = res.first() # 获取数据对象方式二: 与上面等同print(user_obj.id)  # 支持对象操作获取对应对象的idprint(user_obj.username)print(user_obj.password)# 数据的增加: 注册功能的例子1. 准备注册页面2. 获取用户输入# 第一种: 利用models自动帮你保存username = request.POST.get('username')password = request.POST.get('password')res = models.User.objects.create(username=username, password=password)# res 返回值就是当前被创建的对象本身# 第二种: 自己手动保存数据user_obj = models.User(username=username, password=password)user_obj.save()

5.3 利用数据的查改删实现对数据的编辑和删除功能实例

步骤流程:

1. 在模型类中创建数据
2. 准备数据展示HTMl页面.2.1 使用模型类语法查询数据库中的数据2.2 将查询到的数据传递到HTML页面中, 使用模板语法进行渲染提示: 都默认get提交数据2.3 在HTML页面准备编辑按钮:数据定位: 使用/edit_data/?user_id={{ user.id }}. 提交到后端, 可以通过获取user_id进行数据的定位.2.4 准备删除按钮
3. 后端处理用户请求3.1 通过GET提交方式拿到用户的user_id, 再定位到数据对象, 将数据对象传入HTML页面返回一个编辑页面3.2 用户编辑表单, 通过POST请求, 判断如果是POST请求, 那么用户就是编辑页面了.3.3 再对数据对象进行修改/删除3.4 修改完毕以后重定向返回用户数据展示页面

 

代码部分:

  • models.py
from django.db import models# Create your models here.
class User(models.Model):# id = models.AutoField(primary_key=True, verbose_name='主键')username = models.CharField(max_length=66, verbose_name='用户名')password = models.CharField(max_length=255, verbose_name='用户密码')age = models.IntegerField(verbose_name='年龄')sex = models.CharField(max_length=1, default='男', verbose_name='性别')phone = models.BigIntegerField(verbose_name='电话号码')
  • view.py
from django.shortcuts import render, redirect
from app01 import models"""
urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^user_table/', views.user_table),url(r'^edit_data/', views.edit_data),url(r'^del_data/', views.del_data),
]
"""# Create your views here.
def user_table(request):"""查看功能"""# 查询出用户表里面所有的数据# user_list_obj = models.User.objects.filter()  # 方式一user_queryset = models.User.objects.all()       # 方式二: 更加见名知意# print(user_list_obj)return render(request, 'user_table.html', locals())def edit_data(request):"""编辑功能"""edit_id = request.GET.get('user_id')edit_obj = models.User.objects.filter(id=edit_id).first()if request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')age = request.POST.get('age')sex = request.POST.get('sex')phone = request.POST.get('phone')models.User.objects.filter(id=edit_id)# 去数据库中修改对应的数据内容# 修改数据方式一:'''当字段特别多的时候效率会非常的低,它会从头到尾将数据的所有字段全部更新一边 无论该字段是否被修改'''edit_obj.username = usernameedit_obj.username = passwordedit_obj.username = ageedit_obj.username = sexedit_obj.phone = phoneedit_obj.save()# 修改数据方式二:'''将filter查询出来的列表中所有的对象全部更新批量更新操作只修改被修改的字段'''models.User.objects.filter(id=edit_id).update(username=username, password=password, age=age, sex=sex,phone=phone)return redirect('/user_table/')return render(request, 'edit_data.html', locals())def del_data(request):"""删除功能"""del_id = request.GET.get('user_id')'''真正的删除功能应该需要二次确认, 我们这里先不做.平常的删除数据内部其实并不是真正的删除 我们会给数据添加一个标识字段用来表示当前数据是否被删除了,如果数据被删了仅仅只是讲字段修改一个状态username     password	    is_deletejason			123				0egon			123				1'''models.User.objects.filter(id=del_id).delete()return redirect('/user_table/')

总结

# 静态文件# 什么是静态文件?已经写好功能的文件, 可以拿来就直接使用的文件例如: js, css, img, 前端第三方框架 ...# django静态文件配置如何配置提示: django项目默认不会帮你创建静态文件, 需要手动创建. 约定熟成文件名为 static到settings.py中找到STATIC_URL. 并在其下面添加上STATICFILES_DIRS = [os.path.join(BASE_DIR, '创建的静态文件'),os.path.join(BASE_DIR, '创建的静态文件2'),]# 如何解决接口前缀不断变化,html页面上路径的引用需要反复修改的问题在templates管理的html文件中, 在head引用外部资源之前以如下书写方式:{% load static %}<script src="{% static '静态文件中的文件路径' %}"></script># from表单如果指定post请求, 需要注释一行代码:settings.py -> MIDDLEWARE# 'django.middleware.csrf.CsrfViewMiddleware',# request对象的方法request.method      返回大写字符串格式的当前请求方式request.GET         返回URL中问好后面携带的参数. QueryDict对象: <QueryDict: {'username': ['egon'], 'hobbies': ['play', 'study']}>request.POST        返回POST请求提交过来的普通键值对(不包含文件)request.GET.get()   返回对象列表中最后一个的值 -> strrequest.POST.get()request.GET.getlist()   返回对象列表中所有的值    -> listrequest.POST.getlist()# django连接数据库# django自带的数据库: db.sqlite3# 配置更换1. 配置数据库: 找到settings.py文件中的DATABASES输入如下:DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','HOST': 'IP地址','PORT': 3306,'USER': '登录用户','PASSWORD': '用户密码','NAME': '库名','CHARSET': 'utf8',}}2. 代码声明: 使用pymysql替换django自带的数据库模块MySQLdb.前提: 在项目文件夹下或者任意的应用文件夹下__init__.py中书写代码声明import pymysqlpymysql.install_as_MySQLdb()# django orm# 什么是django ormORM 全称 object relational mapping 对象关系映射功能: 通过ORM实现对操作对象的操作模式来操作数据库中的数据实现: 通过models中的类来对应数据库中的一个表,一个对象对应一个数据行,一个属性对应数据库中的一个字段缺陷: 封装程度太高, 有时候会出现创建sql语句的效率问题.# 使用django orm: 进入models.py中书写模型类'''1. 不指定默创建id主键2. ChildField必须指定max_length3. verbose_name 所有字段都有 对字段的描述'''# id int primary key auto_incrementmodels.AutoField(primary_key=True, verbose_name='主键')# username varchar(32)models.CharField(max_length=32, verbose_name='用户名')# password varchar(255)models.charField(max_length=255, verbose_name='密码')# age intmodels.IntegerField(verbose_name='年龄')# 数据库迁移命令前提: 执行终端命令行当前路径一定要在项目文件夹下, 且配置了python的环境变量生成数据库迁移记录, 记录到migrations文件夹中: python3 manage.py makemigrations将数据迁移提交: python3 manage.py migrate# orm字段的增删改查增:1. 在执行了生成数据库迁移记录命令之后在终端命令行中输入默认值2. 直接为字段指定可以为空username = models.CharField(max_length=32, null=True)3. 为字段指定默认值username = models.CharField(max_length=32, default='我是默认值')删:只要将需要删除的字段注释以后执行数据库迁移命令即可注意(危险): 删除的字段对应的数据也将会删除改:直接在原来的字段的基础之上进行修改即可# 数据的增查增:方式一: 使用models自动创建user_obj = models.User.objects.create(**kwargs)user_obj是一个QuerySet对象. 当前创建的对象本身方式二: 手动创建user_obj = models.User(**kwargs)user_obj.save()查:user_obj_list = models.User.objects.filter(**kwargs)user_obj_list是一个QuerySet对象. 它是一个列表套数据的对象: <QuerySet [<User: User object>, <User: User object>, <User: User object>]> 方式一: 索引取值. 不能使用负数.user_obj = user_obj_list[0]方式二: 推荐使用.first(). 但是其内部使用的也是通过索引取值user_obj = user_obj_list.first()            

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/136971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西门子S7-1200PLC混合通信编程(ModbusTcp和UDP通信)

S7-1200PLC的MODBUS-TCP通信 西门子PLC ModbusTcp通信访问网关后从站(SCL语言轮询状态机)-CSDN博客文章浏览阅读305次。西门子PLC的ModbusTcp通信在专栏已有很多文章介绍,所不同的是每个项目的通信需求都略有不同,今天我们以访问网关后的三个从站数据来举例,给出轮询的推荐…

iOS 16.4 之后真机与模拟器无法使用Safari调试H5页面问题

背景 iOS 16.4之后用真机调试H5时候发现&#xff0c;Safari中开发模块下面无法调试页面 解决方案 在WKWebView中设置以下代码解决 if (available(iOS 16.4, *)) {[_webView setInspectable:YES];}然后再次调试就可以了

[git] cherry pick 将某个分支的某次提交应用到当前分支

功能&#xff1a;将某个分支的某次提交应用到当前分支 应用场景&#xff1a; 在合并分支时&#xff0c;是将源分支的所有内容都合并到目标分支上&#xff0c;有的时候我们可能只需要合并源分支的某次或某几次的提交&#xff0c;这个时候我们就需要使用到git的cherry-pick操作…

边缘计算多角色智能计量插座:用电监测和资产管理的未来智能化引擎

目前主流的智能插座涵盖了红外遥控&#xff08;控制空调和电视等带有红外标准的电器&#xff09;&#xff0c;配备着测温、测湿等仓库应用场景&#xff0c;配备了人体红外或者毫米波雷达作为联动控制&#xff0c;但是大家有没有思考一个问题&#xff0c;就是随着对接的深入&…

易点易动固定资产管理系统:实现全生命周期闭环式管理和快速盘点

固定资产管理对于企业来说至关重要&#xff0c;它涉及到资产的采购、领用、使用、维护和报废等各个环节。然而&#xff0c;传统的固定资产管理方式往往繁琐、耗时&#xff0c;容易导致信息不准确和资源浪费。为了解决这些问题&#xff0c;我们引入易点易动固定资产管理系统&…

DevOps简介

DevOps简介 1、DevOps的起源2、什么是DevOps3、DevOps的发展现状4、DevOps与虚拟化、容器 1、DevOps的起源 上个世纪40年代&#xff0c;世界上第一台计算机诞生。计算机离不开程序&#xff08;Program&#xff09;驱动&#xff0c;而负责编写程序的人&#xff0c;被称为程序员&…

Kotlin基础数据类型和运算符

原文链接 Kotlin Types and Operators Kotlin是新一代的基于JVM的静态多范式编程语言&#xff0c;功能强大&#xff0c;语法简洁&#xff0c;前面已经做过Kotlin的基本的介绍&#xff0c;今天就来深入的学习一下它的数据类型和运算操作符。 数据类型 与大部分语言不同的是&am…

socket编程中的EINTR是什么?

socket编程中的EINTR是什么? 在socket编程中&#xff0c;我们时常在accept/read/write等接口调用的异常处理的部分看到对于EINTR的处理&#xff0c;例如下面这样的语句&#xff1a; repeat: if(read(fd, buff, size) < 0) {if(errno EINTR)goto repeat;elseprintf("…

三菱FX3U系列-定位指令

目录 一、简介 二、指令形式 1、相对定位[DRVI、DDRVI] 2、绝对定位[DRVA、DDRVA] 三、总结 一、简介 定位指令用于控制伺服电机或步进电机的位置移动。可以通过改变脉冲频率和脉冲数量来控制电机的移动速度和移动距离&#xff0c;同时还可以指定移动的方向。 二、指令形…

Linux下的环境变量【详解】

Linux下的环境变量 一&#xff0c;环境变量的概念1 概述2 环境变量的分类3 常见的环境变量4 查看环境变量4.1 shell变量4.2 查看环境变量 5 添加和删除环境变量5.1 添加环境变量5.2 删除环境变量 6. 通过代码如何获取环境变量6.1 命令行的第三个参数6.2 通过第三方变量environ获…

Linux 的热插拔机制通过 Udev(用户空间设备)实现、守护进程

一、Udev作用概述 udev机制简介udev工作流程图 二、Linux的热拔插UDEV机制 三、守护进程 守护进程概念守护进程在后台运行基本特点 四、守护进程和后台进程的区别 一、Udev作用概述 udev机制简介 Udev&#xff08;用户空间设备&#xff09;是一个 Linux 系统中用于动态管…

微信号绑定50个开发者小程序以后超额如何删除不用的

我们在开发微信小程序的时候&#xff0c;当前开发者工具登录的必须是该小程序的开发者才能进行小程序的开发&#xff0c;添加开发者的步骤是&#xff1a; 添加开发者 1、进入微信开放平台&#xff0c;然后扫码进入管理平台 2、找到下图所示位置 3:、输入要添加的微信账号&am…

LCD英文字模库(16x8)模拟测试程序

字模 字模&#xff0c;就是把文字符号转换为LCD能识别的像素点阵信息。 电子发烧友可能都熟悉字模的用途。就是调用者通过向LCD模块发送字模数据&#xff0c;LCD根据字模数据在LCD面板上相应的像素描绘出图形或文字。 现在&#xff0c;大部分的LCD都内置了字模库&#xff0c…

11-09 周四 CNN 卷积神经网络基础知识

11-09 周四 CNN 卷积神经网络 时间版本修改人描述2023年11月9日09:38:12V0.1宋全恒新建文档 简介 学习一下CNN&#xff0c;卷积神经网络。使用的视频课程。视觉相关的任务&#xff1a; 人脸识别 卷积网络与传统网络的区别&#xff1a; <img altimage-20231109094400591 s…

电脑怎么录制视频,录制的视频怎么剪辑?

在现今数字化的时代&#xff0c;视频成为了人们日常生活中不可或缺的一部分。因此&#xff0c;对于一些需要制作视频教程、录制游戏或者是进行视频演示的人来说&#xff0c;电脑录屏已经成为了一个必不可少的工具。那么&#xff0c;对于这些人来说&#xff0c;如何选择一个好用…

Zigbee—网络层地址分配机制

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;孤雏 0:21━━━━━━️&#x1f49f;──────── 4:14 &#x1f504; ◀️ ⏸ ▶️ ☰ &#x1f497;关注…

大厂面试题-MySQL中的RR隔离级别,到底有没有解决幻读问题?

就MySQL中的RR(Repeatable Reads)事务隔离级别&#xff0c;到底有没有解决幻读问题发起了激烈的讨论。 一部分人说有&#xff0c;一部分人说没有。 结论&#xff0c;MySQL中的RR事务隔离级别&#xff0c;在特定的情况下会出现幻读的问题。 所谓的幻读&#xff0c;表示在同一…

景联文科技加入中国人工智能产业发展联盟(AIIA),与行业各方共促AI产业发展

近日&#xff0c;景联文科技加入中国人工智能产业发展联盟&#xff08;AIIA&#xff09;&#xff0c;与行业各方共同挖掘人工智能数据的更多价值&#xff0c;破解中国人工智能AI数据短缺难题。 中国人工智能产业发展联盟&#xff08;简称AIIA&#xff09;是在国家发改委、科技部…

GIS入门,xyz地图瓦片是什么,xyz数据格式详解,如何发布离线XYZ瓦片到nginx或者tomcat中

XYZ介绍 XYZ瓦片是一种在线地图数据格式,由goole公司开发。 与其他瓦片地图类似,XYZ瓦片将地图数据分解为一系列小的图像块,以提高地图显示效率和性能。 XYZ瓦片提供了一种开放的地图平台,使开发者可以轻松地将地图集成到自己的应用程序中。同时,它还提供了高分辨率图像和…

红海云签约和兆服饰,科技引领服饰行业人力资源数字化转型

和兆服饰从事多品牌多品类经营管理&#xff0c;旗下拥有POLOSPORT、POLOKIDS、CARTELO等国际品牌。作为一个主打POLO文化的服饰品牌&#xff0c;诞生于美国的POLOSPORT拥有现代感的产品设计、系列化的产品搭配、全方位的服务&#xff0c;是最具美国马球精神的休闲时尚服饰品牌之…