【web开发】7、Django(2)

news2024/11/23 13:46:33

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、部门列表
  • 二、部门管理(增删改)
  • 三、用户管理过渡到modelform组件
  • 四、modelform实例:靓号操作
  • 五、自定义分页组件
  • 六、自定义有Bootstrap样式的ModelForm
  • 七、管理员列表(增删改)


一、部门列表

1.在models.py下

class Department(models.Model):
    """部门表"""
    title =models.CharField(verbose_name="标题",max_length=32)
    def __str__(self):
        return self.title

2.在views文件下
def …(request):return(request,’…html’)

def depart_list(request):
    """部门类"""
    # 去数据库中获取所有的部门列表
    queryset = models.Department.objects.all()
    return render(request, 'depart_list.html', queryset )

3.depart_list.html文件下

{% extends 'layout.html' %}

{% block content %}
    <div class="container">
        <div class="panel panel-default" style="margin-top: 20px;">
            <!-- Default panel contents -->
            <div class="panel-heading">
                <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
                批量上传
            </div>
        <div class="panel-body">
            <form method="post" enctype="multipart/form-data" action="/depart/multi/">
                {% csrf_token %}
                <div class="form-group">
                    <input type="file" name="exc">
                </div>
                <input type="submit" value="上传" class="btn btn-info btn-sm">
            </form>
        </div>
        <div style="margin-bottom: 10px"></div>
            <div class="panel-heading">
                <a class="btn btn-success btn-xs " href="/depart/add/">
                    <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
                    新建部门
                </a>
            </div>

            <!-- Table -->
            <table class="table">
                <thead>
                <tr>
                    <th>id</th>
                    <th>名称</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for obj in queryset %}
                    <tr>
                        <th scope="row">{{ obj.id }}</th>
                        <td>{{ obj.title }}</td>
                        <td>
                            <a href="/depart/{{ obj.id }}/edit/" class="btn btn-primary btn-xs ">编辑</a>
                            <a href="/depart/delete/?nid={{ obj.id }}" class="btn btn-danger btn-xs ">删除</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
    </div><!-- /.container -->

{% endblock %}

二、部门管理(增删改)

注意:两个html文件中都需要{% load static %}
添加部门
1)在urls.py下创建path(‘depart/add/’, views.depart_add),
2)在views.py下创建def depart_add(request)

def depart_add(request):
    """添加部门"""
    if request.method == 'GET':
        return render(request, 'depart_add.html')
    # 获取用户POST提交过来的数据
    title = request.POST.get("title")
    # 保存到数据库
    models.Department.objects.create(title=title)
    # 重定向部门列表
    return redirect("/depart/list/")

3)templates目录下创建depart_add.html

{% extends 'layout.html' %}
{% block content %}
     <div class="container">
        <div class="panel panel-default">
            <div class="panel-heading">新建部门</div>
            <div class="panel-body">
                <form class="form-horizontal" method="post">
                    {% csrf_token %}
                    <div class="form-group">
                        <label class="col-sm-2 control-label">标题</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" placeholder="标题" name="title"/>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-sm-offset-2 col-sm-10">
                            <button type="submit" class="btn btn-primary">提 交</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>

    </div>
{% endblock %}

4)在depart_list.html文件下新建部门处链接到depart/add/地址

删除部门
1)在urls.py下创建path(‘depart/delete/’, views.depart_delete),
2)在views.py下创建def depart_delete(request,nid)

def depart_delete(request, nid):
    """删除部门"""
    # 获取id
    nid = request.GET.get('nid')
    # 删除
    models.Department.objects.filter(id=nid).delete()
    # 跳转(重定向回部门列表)
    return redirect("/depart/list/")

3)在depart_list.html文件下的删除按钮内

<a href="/depart/delete/?nid={{ obj.id }}"  class="btn btn-danger btn-xs ">删除</a>

编辑部门
1)在urls.py下创建path(‘depart/edit/’, views.depart_edit),
http://127.0.0.1:8000/depart/int/edit/

path('depart/<int:nid>/edit/', views.depart_edit),

2)在views.py下创建def depart_edit(request,nid)

def depart_edit(request, nid):
    """编辑部门"""
    if request.method == "GET":
        # 根据id获取编辑的数据
        row_object = models.Department.objects.filter(id=nid).first()
        print(row_object.id, row_object.title)
        # 重定向到编辑页面
        return render(request, "depart_edit.html", {"row_object": row_object})
    # 用户提交的标题
    title = request.POST.get("title")
    # 根据id在数据库中进行更新
    models.Department.objects.filter(id=nid).update(title=title)
    # 跳转(重定向回部门列表)
    return redirect("/depart/list/")

3)vaule表示默认值,在depart_list.html文件下的编辑按钮内

{% extends 'layout.html' %}
{% block content %}
     <div class="container">
        <div class="panel panel-default">
            <div class="panel-heading">修改部门</div>
            <div class="panel-body">
                <form class="form-horizontal" method="post">
                    {% csrf_token %}
                    <div class="form-group">
                        <label class="col-sm-2 control-label">标题</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" placeholder="标题" name="title" value="{{ row_object.title }}"/>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-sm-offset-2 col-sm-10">
                            <button type="submit" class="btn btn-primary">提 交</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>

    </div>
{% endblock %}

三、用户管理过渡到modelform组件

获取数据

insert into app01_userinfo(name,password,age,account,creat_time,gender,depart_id) values("刘乐","1e4q",42,3321.02,"2010-03-11",2,11);

在models.py文件下

class UserInfo(models.Model):
    """员工表"""
    name =models.CharField(verbose_name="姓名",max_length=32)
    password =models.CharField(verbose_name="密码",max_length=32)
    age =models.IntegerField(verbose_name="年龄")
    account =models.DecimalField(verbose_name="余额",max_digits=10,decimal_places=2,default=0)
    creat_time =models.DateField(verbose_name="入职时间")
# 有约束     on_delete=models.CASCADE级联删除
    depart = models.ForeignKey(verbose_name="所属部门",to="Department",to_field="id",on_delete=models.CASCADE)
# 链接部分被删除时置空
# depart = models.ForeignKey(to="Department",to_field="id",null=True,blank=True,on_delete=models.SET_NULL)
# 在django中做的约束
    gender_choices=(
        (1,"男"),
        (2,"女"),
    )
    gender =models.SmallIntegerField(verbose_name="性别",choices=gender_choices)

在user_list.html文件下

"""注意:return render(request,"user_list.html", {"queryset": queryset})(双引号、花括号、冒号)"""
<th>{{ obj.id }}</th>
<td>{{ obj.name }}</td>
<td>{{ obj.password }}</td>
<td>{{ obj.age }}</td>
<td>{{ obj.account }}</td>
<td>{{ obj.creat_time|date:"Y-m-d" }}</td>#日期的读取
<td>{{ obj.get_gender_display }}</td>#性别
<td>{{ obj.depart.title }}</td> #关联其他表的读取

在没有利用Django组件:ModelForm组件下

添加用户

def user_add(request):
    if request.method == "GET":
        context = {
            'gender_choices': models.UserInfo.gender_choices,
            'depart_list': models.Department.objects.all()
        }
        return render(request, "user_add.html", context)
    name = request.POST.get("name")
    password = request.POST.get("password")
    age = request.POST.get("age")
    account = request.POST.get("account")
    # from django.utils import timezone
    # creat_time = timezone.now()
    creat_time = request.POST.get("creat_time")
    gender = request.POST.get("gender")
    depart_id = request.POST.get("depart_id")
    models.UserInfo.objects.create(name=name, password=password, age=age,
                                   account=account, creat_time=creat_time,
                                   gender=gender, depart_id=depart_id)

    return redirect("/user/list/")

利用Django组件:ModelForm组件
在views.py文件下

class UserModelForm(forms.ModelForm):
    # name = forms.CharField(min_length=3, label="用户名")
    class Meta:
        model = models.UserInfo
        fields = ["name", "password", "age", "account", "creat_time", "gender", "depart"]
        # widgets = {
        #     "name":forms.TextInput(attrs={"class":"col-sm-2 control-label"})
        # }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 循环找到所有的插件,添加了"class":"form-control"得样式
        for name, field in self.fields.items():
            print(name, field)
            field.widget.attrs = {"class": "form-control", "placeholder": field.label}

添加用户
GET下:form = UserModelForm()
POST下:form = UserModelForm(data=request.POST)

from django import forms
def use_model_form_add(request):
    """添加用户"""
    if request.method == "GET":
        form = UserModelForm()
        return render(request, 'user_model_form_add.html', {"form": form})
    #     用户提交的数据进行校验,如果合法再保存到数据库
    form = UserModelForm(data=request.POST)
    if form.is_valid():
        # print(form.cleaned_data)
        form.save()
    return render(request, 'user_model_form_add.html', {"form": form})

"编辑用户
GET下:form = UserModelForm(instance=row_object)
POST下:form = UserModelForm(data=request.POST, instance=row_object)

from django import forms
def user_edit(request, nid):
    """编辑用户"""
    # 根据id去数据库获取要编辑的那一行数据
    row_object = models.UserInfo.objects.filter(id=nid).first()
    if request.method == "GET":
        # instance=row_object表示将数据库中获取的那行的每一个值都显示在页面上
        form = UserModelForm(instance=row_object)
        return render(request, 'use_edit.html', {"form": form})

    form = UserModelForm(data=request.POST, instance=row_object)
    if form.is_valid():
        form.save()
        return redirect('/user/list')
    return render(request, 'user_edit.html', {"form": form})

删除用户

def user_delete(request, nid):
    """删除用户"""
    models.UserInfo.objects.filter(id=nid).delete()
    return redirect('/user/list/')

四、modelform实例:靓号操作

首先在models.py文件下定义PrettyNum这个类,同时用djando命令生成数据库表(python manage.py makemigrations;python manage.py migrate)数据库下才有app01_prettynum这个数据表

views.py文件下

from django import forms
from django.core.validators import RegexValidator

class PrettyModelForm(forms.ModelForm):
    # 验证:方法1
    mobile = forms.CharField(
        label="手机号",
        # validators=[RegexValidator(r'^159[0-9]+$','数字必须以159开头')],
        validators=[RegexValidator(r'^1[3-9]\d{9}$', '手机号格式错误')],
    )

    class Meta:
        model = models.PrettyNum
        # fields = ['mobiles','price','level','status']  一一列举
        # exclude = ['level']  排除
        fields = "__all__"

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 循环找到所有的插件,添加了"class":"form-control"得样式
        for name, field in self.fields.items():
            print(name, field)
            field.widget.attrs = {"class": "form-control", "placeholder": field.label}

添加靓号

def pretty_add(request):
    if request.method == 'GET':
        form = PrettyModelForm()
        return render(request, 'pretty_add.html', {"form": form})
    row_object = models.PrettyNum.objects.create()
    form = PrettyModelForm(data=request.POST, instance=row_object)
    if form.is_valid():
        form.save()
        return redirect('/pretty/list')
    return render(request, 'pretty_add.html', {"form": form})

编辑靓号

def pretty_edit(request, nid):
    row_object = models.PrettyNum.objects.filter(id=nid).first()
    if request.method == 'GET':
        form = PrettyModelForm(instance=row_object)
        return render(request, 'pretty_edit.html', {"form": form})
    form = PrettyModelForm(data=request.POST, instance=row_object)
    if form.is_valid():
        form.save()
        return redirect('/pretty/list')
    return render(request, 'pretty_edit.html', {"form": form})

删除靓号

def pretty_delete(request, nid):
    models.PrettyNum.objects.filter(id=nid).delete()
    return redirect('/pretty/list/')

靓号列表

def pretty_list(request):
    data_dict = {}
    search_data = request.GET.get('q', "")
    if search_data:
        data_dict["mobile__contains"] = search_data

    queryset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")

    page_object = Pagination(request, queryset)  # 分页

    context = {
        "queryset": page_object.page_queryset,
        "search_data": search_data,  # 分完页的数据
        "page_string": page_object.html()  # 页码
    }
    return render(request, 'pretty_list.html', context)

搜索靓号
对于数字类型:
filter(id=12) #等于12
filter(id__gt=12) #大于12
filter(id__gte=12) #大于等于12
filter(id__lt=12) #小于12
filter(id__lte=12) #小于等于12
filter(id=12)
对于字符串类型:
filter(mobile=”1999”)
filter(mobile__startswith=”1999”) #筛选1999开头
filter(mobile__endswith=”1999”)
filter(mobile__contains=”1999”)

五、自定义分页组件

4.分页组件的创建
在appo01目录下创建utils目录,并创建pagination.py文件

"""
自定义分页组件  
"""
from django.utils.safestring import mark_safe
class Pagination(object):
    def __init__(self,request,queryset,page_size=10,page_param="page",plus=5):
        """
        :param request: 请求对象
        :param queryset: 符合条件的数据
        :param page_size: 每页显示多少条数据
        :param page_param: 在URL中传递的获取分页的参数 例如/pretty/list/?page=4
        :param plus:显示当前页的前或后几页(页码)
        """
        import copy
        query_dict = copy.deepcopy(request.GET)
        query_dict._mutable = True

        self.query_dict = query_dict

        page = request.GET.get(page_param, "1")
        if page.isdecimal():
            page=int(page)
        else:
            page=1
        self.page =page
        self.page_size=page_size
        self.page_param=page_param

        self.start = (page - 1) * page_size
        self.end = page * page_size

        self.page_queryset = queryset[self.start:self.end]

        total_count = queryset.count()
        total_page_count, div = divmod(total_count, page_size)
        if div:
            total_page_count += 1
        self.total_page_count =total_page_count
        self.plus=plus

    def html(self):
            # 计算出显示当前页的的前五页后五页
        # 数据较少,显示全部页码
        if self.total_page_count <= 2 * self.plus + 1:
            start_page = 1
            end_page = self.total_page_count
        else:
            # 数据较多
            # 当前页<5
            if self.page <= self.plus:
                start_page = 1
                end_page = 2 * self.plus + 1
            else:
                # 当前页>5
                # 当前页+5>总页面
                if (self.page + self.plus) > self.total_page_count:
                    start_page = self.total_page_count - 2 * self.plus
                    end_page = self.total_page_count
                else:
                    start_page = self.page - self.plus
                    end_page = self.page + self.plus

        # 页码
        page_str_list = []
        self.query_dict.setlist(self.page_param,[1])

        first = '<li><a  href="?{}">首页</a></li>'.format(self.query_dict.urlencode())
        page_str_list.append(first)
            # 上一页
        if self.page > 1:
            self.query_dict.setlist(self.page_param,[self.page-1])
            prev = '<li><a  href="?{}"></a></li>'.format(self.query_dict.urlencode())
        else:
            prev = '<li><a  href="?{}"></a></li>'.format(1)
        page_str_list.append(prev)

        for i in range(start_page, end_page + 1):
            self.query_dict.setlist(self.page_param,[i])
            if i == self.page:
                ele = '<li class="active"><a  href="?{}">{}</a></li>'.format(self.query_dict.urlencode(), i)
            else:
                ele = '<li><a href="?{}">{}</a></li>'.format(self.query_dict.urlencode(), i)
            page_str_list.append(ele)

        if self.page >= self.total_page_count:
            self.query_dict.setlist(self.page_param,[self.page+1])
            next = '<li><a  href="?{}"></a></li>'.format(self.query_dict.urlencode())
        else:
            self.query_dict.setlist(self.page_param,[self.total_page_count])
            next = '<li><a  href="?{}"></a></li>'.format(self.query_dict.urlencode())
        page_str_list.append(next)

        # 尾页
        self.query_dict.setlist(self.page_param,[self.total_page_count])
        end = '<li><a  href="?{}">尾页</a></li>'.format(self.query_dict.urlencode())
        page_str_list.append(end)
        search_string = """             
            <li >
                <form method="get" style="float: left">
                    <input  type="text" 
                            class="form-control" name="page" placeholder="页码" 
                            style="width: 80px;position: relative;float: left;display: inline-block;border-radius: 0">
                    <button type="submit" class="btn btn-default">跳转</button>
                </form>
            </li>
        """
        page_str_list.append(search_string)
        page_string = mark_safe("".join(page_str_list))
        return page_string

注意:

"""如果以后想要使用这个分页组件,你需要做如下几件事:

在视图函数views.py函数中:
def pretty_list(request):

#1.根据所需筛选数据
    queryset = models.PrettyNum.objects.all()
#2.实例化分页对象
    page_object = Pagination(request,queryset,page_size=2)

    context ={
        "queryset": page_object.page_queryset, #分完页的数据
         "page_string": page_object.html() #生成页码
    }
    return render(request, 'pretty_list.html',context)

在html页面中
                <ul class="pagination">
                    {{ page_string }}
                </ul>
"""

在这里插入图片描述

靓号列表(pretty_list)
views.py文件如上,需要提前导入:
from app01.utils.pagination import Pagination
pretty_list.html文件

{% extends 'layout.html' %}

{% block content %}
    <div class="container">
        <div class="panel panel-default" >
            <!-- Default panel contents -->
            <div class="panel-heading" >
                <a class="btn btn-success btn-xs " href="/pretty/add/">
                    <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
                    添加靓号
                </a>

                <div class="col-lg-3" style="float: right;display: block;padding-bottom: 5px">
                    <form method="get">
                        <div class="input-group">
                        <span class="input-group-btn">
                        <button class="btn btn-default" type="submit">
                            <span class="glyphicon glyphicon-zoom-in" aria-hidden="true"></span>
                        </button>
                         </span>
                            <input type="text"name='q' class="form-control" placeholder="Search for..."
                                   value="{{ search_data }}">
                        </div><!-- /input-group -->
                    </form>
                </div>

            </div>

            <!-- Table -->
            <table class="table">
                <thead>
                <tr>
                    <th>id</th>
                    <th>电话号</th>
                    <th>单价</th>
                    <th>级别</th>
                    <th>状态</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                {% for obj in queryset %}
                    <tr>
                        <th scope="row">{{ obj.id }}</th>
                        <td>{{ obj.mobile }}</td>
                        <td>{{ obj.price }}</td>
                        <td>{{ obj.get_level_display }}</td>
                        <td>{{ obj.get_status_display }}</td>
                        <td>
                            <a href="/pretty/{{ obj.id }}/edit/" class="btn btn-primary btn-xs ">编辑</a>
                            <a href="/pretty/{{ obj.id }}/delete/" class="btn btn-danger btn-xs ">删除</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>

        <div>
            <nav>
                <ul class="pagination">
                    {{ page_string }}
                </ul>
            </nav>
        </div>

    </div><!-- /.container -->


{% endblock %}

六、自定义有Bootstrap样式的ModelForm

在appo01目录下创建utils目录,并创建bootstrap.py文件
在这里插入图片描述

from django import forms

class BootstrapModelForm(forms.ModelForm):
    bootstrap_exclude_fields = ['img']
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 循环找到所有的插件,添加了"class":"form-control"得样式
        for name, field in self.fields.items():
            if name in self.bootstrap_exclude_fields:
                continue
            # 字段中有属性,保留原来的属性,没有属性,才增加
            if field.widget.attrs:
                # 有则添加字典值
                field.widget.attrs["class"] = "form-control"
                field.widget.attrs["placeholder"] = field.label
            else:
                field.widget.attrs = {
                    "class": "form-control",
                    "placeholder": field.label
                }

与没有Bootstrap样式的ModelForm的区别,在于需要提前引用

from app01.utils.bootstrap import BootstrapModelForm

七、管理员列表(增删改)

class AdminModelForm(BootstrapModelForm):
    confirm_password = forms.CharField(
        label="确认密码",
        widget=forms.PasswordInput(render_value=True))

    class Meta:
        model = models.Admin
        fields = ["username", 'password', 'confirm_password']
        widgets = {
            "password": forms.PasswordInput(render_value=True)
        }

    def clean_password(self):
        pwd = self.cleaned_data.get("password")
        return md5(pwd)

    def clean_confirm_password(self):
        pwd = self.cleaned_data.get("password")
        confirm = md5(self.cleaned_data.get("confirm_password"))
        if confirm != pwd:
            raise ValidationError("密码不一致")
        # 返回的数值保存在数据库中
        return confirm

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

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

相关文章

OpenCV(四十):图像分割—漫水填充

1.漫水填充原理 图像分割中的漫水填充&#xff08;Flood Fill&#xff09;算法是一种基于区域增长的像素分类方法。其原理是在图像中从种子点开始&#xff0c;逐渐向周围扩展&#xff0c;并根据一定的条件决定是否将相邻的像素归属于同一区域。 漫水填充的基本原理如下&#x…

香港银行开户内地见证流程

香港公司内地见证开户流程&#xff1a; 资料准备——银行进行资料预审——预审通过&#xff0c;预约面谈&#xff08;确定面谈时间以及在内地指定城市的分行进行面谈&#xff09;——携带齐全资料至内地指定城市分行&#xff0c;在当地银行职员的见证下签署资料——面谈通过&a…

python-爬虫-三字代码网站爬取

三字代码 http://www.6qt.net/ 爬取城市、三字代码、所属国家、国家代码、四字代码、机场名称、英文名称、查询次数 import requestsurl http://www.6qt.net/ r requests.get(url) r.encodinggb2312 print(r.text)使用xpath解析&#xff0c;得到城市名 html.fromstring(html…

管理固定资产怎么界定优化

固定资产的管理和利用是至关重要的一环。然而&#xff0c;如何准确地界定和管理这些资产&#xff0c;以实现最大的效益&#xff0c;却是一个需要深思熟虑的问题。本文旨在探讨行政管理中固定资产的界定方法以及如何进行优化管理。  我们需要明确固定资产的概念。固定资产是指…

ABB AV94a控制模块

多功能性&#xff1a; 控制模块通常设计为多功能设备&#xff0c;可以执行各种控制任务&#xff0c;包括监测传感器数据、执行逻辑操作、生成输出信号等。 可编程性&#xff1a; 许多现代控制模块都具有可编程功能&#xff0c;使用户能够根据需要自定义其行为&#xff0c;从而…

深刻理解Java中方法调用的参数传递

Java方法调用的参数传递 首先给结论&#xff1a;Java中均为值传递。 下面通过概念分析代码示例的方式&#xff0c;实现深刻理解值传递的含义&#xff0c;避免死记硬背。 Java的两种数据类型 基本数据类型&#xff0c;比如int&#xff0c;double&#xff0c;boolean等&#x…

flex布局实现 内容区域高度自适应

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 一、背景说明 对于纵向排列布局&#xff0c;且上中下个个模块都是自动高度。当我们针对中间部分需要自适应高度且进行滚动时&#xff0c;那我们就可以用flex: 1 来处理。 二 、先看效果图 二 、flex布局 <!DO…

如何使用CMD恢复删除的分区?

分区删除后可以恢复吗&#xff1f; 磁盘分区旨在二级存储上创建一个或多个区域&#xff0c;然后你可以单独管理每个区域&#xff0c;这些区域就是分区。因此&#xff0c;对新安装的存储设备进行分区是很重要的环节&#xff0c;只有分区后才可以在这些设备上创建文件并保存数…

unity 使用声网(Agora)实现语音通话

第一步、先申请一个声网账号 [Agora官网链接]&#xff08;https://console.shengwang.cn/&#xff09; 第二步在官网创建项目 &#xff0c;选择无证书模式&#xff0c;证书模式需要tokenh和Appld才能通话 第三步 官网下载SDK 然后导入到unity&#xff0c;也可以直接在unity商店…

云链商城连锁门店新零售O20系统以零售商城

云链商城连锁门店新零售O20系统以零售商城、门店收银、多渠道进销存、客户管理、互动营销、导购助手、多种奖励模式和数据分析等功能&#xff0c;赋能多品牌连锁门店实现线上线下商品、会员、场景的互联互通&#xff0c;助推企业快速实现营销、服务、效率转型升级&#xff0c;为…

可编程交易区块为DeFi机器人提供强大动力

对于选择基金投资的人来说&#xff0c;一个基本指导原则就是寻找那些管理费最低的基金。资本应该是在运转&#xff0c;而不是用于支付费用。同样&#xff0c;Mysten Lab的Capy交易机器人利用可编程交易区块&#xff08;Programmable Transaction Blocks &#xff0c;PTBs&#…

文章生成器在线使用-自动生成文章的工具

大家好啊&#xff0c;今天我要和大家聊聊一个非常热门的话题——在线文章生成器。主要是帮助我们解决写作困扰&#xff0c;节省大量的时间和精力。我也常遇到常为了写一篇好文章而愁眉苦脸呢&#xff0c;我测试过可以帮助我们生成优质的文章&#xff0c;确实让我们的写作变得简…

1. 微信公众号申请加认证

文章目录 微信公众号申请流程指引微信公众号申请流程注册微信公众号申请完成银行卡账号验证 如何查询微信公众号审核通过登录微信公众号平台后&#xff08;如下图&#xff09;致电微信客服热线 微信公众号认证流程指引微信公众号认证流程选择 微信认证/开通选择验证方式。填写微…

运动耳机哪种类型好、最佳运动耳机推荐

很多人都有着运动的习惯&#xff0c;不论是为了解压放松还是为了健身减肥。而运动方式也是多种多样&#xff0c;包括骑行、跑步、游泳等。 作为“运动伴侣”的运动耳机&#xff0c;很多人都不知道该选择哪一款。通常都是建议大家再运动过程中佩戴专业的运动耳机&#xff0c;因为…

【图像处理】怎么让图片背景变透明?怎么改变图片中线条的颜色?在线PS软件

文章目录 前言一、打开图二、背景透明处理三、改变线条颜色总结 前言 我们处理图片将会使用到PS软件&#xff0c;如果安装了PS那直接打开使用。 如果没有安装PS&#xff0c;可使用在线PS软件&#xff1a; https://www.uupoop.com/#/ 一、打开图 第一步&#xff0c;从这个入口…

线性矩阵不等式(LMI)在控制理论中的应用

目录 &#xff08;一&#xff09;Matlab中的LMI处理工具包 &#xff08;二&#xff09;为什么LMI成为控制理论领域重要工具&#xff1f; &#xff08;三&#xff09;LMI在与Lyapunov不等式的关系 &#xff08;1&#xff09;线性矩阵不等式 &#xff08;2&#xff09;线性矩阵…

如何进行有效测试?——基于MEAP诞生的软件测试实用指南告诉你

近年来出现了一 些新的出版方式&#xff0c;MEAP(Manning Early Access Program)就是其中的一种&#xff0c;把开源运动扩展到出版行业。在MEAP中&#xff0c;读者可在图书出版前逐章阅读早期版本。在作者写作过程中&#xff0c;读者可以及时提供反馈&#xff0c;帮助作者写出更…

苹果发布会,华为成热搜第一?

文 | 琥珀消研社 作者 | April叶 琥珀消研社快评&#xff1a;雷蒙多给华为手机“代言”后&#xff0c;苹果库克又给华为“代言”了&#xff0c;苹果发布会当晚&#xff0c;华为竟然登顶热搜第一#苹果发布会 #华为 #Mate 60 Pro#手机#科技 苹果开发布会&#xff0c;华为却冲上…

Matplotlib | 高阶绘图案例【3】- 五大战区高校排名

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. 数据处理2.1 高效数据2.2 学校排名 &#x1f3f3;️‍&#x1f308; 3. 绘图3.1 绘制图布&#xff0c;设置极坐标系3.2 绘制学校排名柱状图3.3 绘制五大战区扇形区域3.4 添加战区、学校…

javaSE___语法基础(关键字、标识符、数据类型、字符、字符串、运算符)

语法基础 一、关键字的概述和使用二、标识符的概述和组成规则三、标识符中常见的命名规则四、数据类型的概述和分类五、数据类型的概述和分类六、数据类型转换之强制转换七、数据类型转换之强制转换超出范围八、字符和字符串参与运算九、算术运算符的基本用法十、算术运算符和-…