2024--Django平台开发-Django知识点(六)

news2024/11/24 18:42:43

day06 Django知识点

今日概要:

  • Form和ModelForm组件【使用】【源码】
  • 缓存【使用】
  • ORM【使用】
  • 其他:ContentTypes、Admin、权限、分页、信号等

1.Form和ModelForm组件

背景:某个公司后台管理项目。

  • 垃圾

    def register(request):
        """ 用户注册 """
        # 1.获取提交数据
        mobile = request.POST.get("mobile")
        sms = request.POST.get("sms")
        name = request.POST.get("name")
        age = request.POST.get("age")
        email = request.POST.get("email")
        password = request.POST.get("password")
        
        # 2.校验判断(10行)
        # all([mobile,sms])
        # 正则表达式
        
        # 3.业务逻辑代码
    
  • 框架(内置+第三方表单验证组件)

    <form method="post">
        <input type="text" name="mobile1" />
        {{form.mobile1}}
        
        <input type="text" name="sms" />
        {{form.sms}}
        
        <input type="submit" value="提交" />
    </form>
    
    class MyForm(Form):
        mobile1 = forms.CharField(reg="\d{11}", required=True)
        sms = forms.CharField(required=True)
    
    def register(request):
        """ 用户注册 """
        if request.method == "GET":
            # form = MyForm(instance={"mobile1":"18766666666","sms":"999"})
            form = MyForm()
            return render(request, "xxxxx.html",{"form":form})
        
        # 1.获取提交数据
        form = MyForm(request.POST)
        if form.is_valid():
            print(form.cleared_data)
        else:
            print(form.errors)
            
        # 3.业务逻辑代码
        return render(request, "xxxxx.html",{"form":form})
    

关于组件:表单验证、自动生成HTML标签、数据初始化(新建按钮、编辑按钮)、保持原来的数据。

1.1 初识Form组件

基于注册为例来进行测试。

详细见示例:1-form组件.zip

1.2 错误信息

在这里插入图片描述

1.3 展示所有的字段

对象和可迭代对象。

在这里插入图片描述

1.4 问题:关于样式

  • 手动操作

    class RegisterForm(forms.Form):
        v1 = forms.CharField(
            label="手机号",
            required=True,
            # max_length=19,
            # min_length=6,
            initial="武沛齐",
            validators=[RegexValidator(r'^\d{11}$', "手机号格式错误"), ],
            widget=forms.TextInput(attrs={"class":"form-control"}) # <input type="text" class="form-control"/>
        )
        v2 = forms.CharField(
            label="备注",
            required=True,
            widget=forms.Textarea(attrs={"class":"form-control"}) # <textarea class="form-control"/></textarea>
        )
        ...
        ....
        .....
    
    {% for field in form %}
    	<p>{{ field.label }} {{ field }} {{ field.errors.0 }}  </p>
    {% endfor %}
    
  • 自动操作(找到每个字段中的widget插件,再找到插件中的attrs属性,给他每个赋值**{“class”:“form-control”}**

    class RegisterForm(forms.Form):
        v1 = forms.CharField(...,widget=forms.TextInput)
        v2 = forms.CharField(...,widget=forms.TextInput(attrs={"v1":"123"}))
        
        def __init__(self,*args,**kwargs):
            super().__init__(self,*args,**kwargs)
            for name,field in self.fields.items():
                if name == "v1":
                    continue 
                if field.widget.attrs:
                    field.widget.attrs.update({"class":"form-control"})
                else:
                	field.widget.attrs = {"class":"form-control"}
    
    form = RegisterForm()                   # __init__
    form = RegisterForm(data=request.POST)  # __init__
    

1.5 问题:通用父类

class BootStrapForm(object):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for name, field in self.fields.items():
            field.widget.attrs = {"class": "form-control"}


class LoginForm(BootStrapForm, forms.Form):
    user = forms.CharField(label="用户名", widget=forms.TextInput)
    pwd = forms.CharField(label="密码", widget=forms.TextInput)


def login(request):
    form = LoginForm()
    return render(request, "login.html", {"form": form})
class BootStrapForm(forms.Form):
    def __init__(self, *args, **kwargs):
        # 不是找父类
        # 根据类的mro(继承关系),去找上个类
        # super().__init__(*args, **kwargs)
        for name, field in self.fields.items():
            field.widget.attrs = {"class": "form-control"}

class LoginForm(BootStrapForm):
    user = forms.CharField(label="用户名", widget=forms.TextInput)
    pwd = forms.CharField(label="密码", widget=forms.TextInput)

def login(request):
    form = LoginForm()
    return render(request, "login.html", {"form": form})

1.6 答疑

类的内部继承关系,是继续c3算法。

class A:
    pass

class B:
    pass

class C(B,A):
    pass

# [<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
print(C.mro())
老师 假如我们通过继承BootStrapForm实现批量给field对象添加{'class': 'form-control'}属性,那还能添加判断是否存在属性,若存在则更新;不存在再进行添加吗

1.7 ModelForm

  • 使用Form

    • 创建Form类 + 定义字段

      class LoginForm(forms.Form):
          user = forms.CharField(label="用户名", widget=forms.TextInput)
          pwd = forms.CharField(label="密码", widget=forms.TextInput)
      
    • 视图

      def login(request):
          if request.method == "GET":
              form = LoginForm()
              return render(request, "login.html", {"form": form})
          form = LoginForm(data=request.POST)
          if not form.is_valid():
              # 校验失败
              return render(request, "login.html", {"form": form})
          print(form.cleaned_data)
          # ...
          return HttpRespon("OK")
      
    • 前端

      <form>
          {% for field in form %}
          <p>{{ field.label }} {{ field }} {{ field.errors.0 }}</p>
          {% endfor %}
      </form>
      
  • 使用ModelForm

    • models.py

      class UserInfo(models.Model):
          name = models.CharField(verbose_name="用户名", max_length=32)
          age = models.IntegerField(verbose_name="年龄")
          email = models.CharField(verbose_name="邮箱", max_length=128)
      
    • 创建ModelForm

      class LoginForm(forms.ModelForm):
          mobile = forms.CharFiled(label="手机号")
      	class Meta:
              model = models.UserInfo
              fileds = ["name","age", "mobile"]
      
    • 视图使用

      def login(request):
          form = LoginModelForm()
          return render(request, "login.html", {"form": form})
      
    • 页面

      <form>
          {% for field in form %}
          <p>{{ field.label }} {{ field }} {{ field.errors.0 }}</p>
          {% endfor %}
      </form>
      

    注意:

    • 后续进行增伤改查是基于数据库Models中的某个表,推荐使用:ModelForm;

    • 如果要进行表单校验是与数据库的表无关直接使用Form。

1.8 ModelForm两个好的地方

1.8.1 初始化数据

  • Form

    class LoginForm(BootStrapForm, forms.Form):
        user = forms.CharField(label="用户名", widget=forms.TextInput)
        pwd = forms.CharField(label="密码", widget=forms.TextInput)
    
    def login(request):
        form = LoginForm(initial={"user": "武沛齐", "pwd": "123"})
        return render(request, "login.html", {"form": form})
    

    在这里插入图片描述

  • ModelForm

    class LoginModelForm(BootStrapForm, forms.ModelForm):
        mobile = forms.CharField(label="手机号", widget=forms.TextInput)
    
        class Meta:
            model = models.UserInfo
            fields = ["name", "age", "mobile"]
            widgets = {
                "age": forms.TextInput,
            }
            labels = {
                "age": "x2",
            }
    
        def clean_name(self):
            value = self.cleaned_data['name']
            # raise ValidationError("....")
            return value
    
    def login(request):
        user_object = models.UserInfo.objects.filter(id=1).first()
        form = LoginModelForm(instance=user_object, initial={"mobile": "武沛齐"})
        return render(request, "login.html", {"form": form})
    

在这里插入图片描述

1.8.2 新建数据

  • Form组件

    def login(request):
        if request.method == "GET":
        	form = LoginForm(initial={"user": "武沛齐", "pwd": "123"})
        	return render(request, "login.html", {"form": form})
        form = LoginForm(data=request.POST)
        if not form.is_valid():
            return render(request, "login.html", {"form": form})
        
        # form.cleaned_data
        # 手动读取字典,保存至数据库
        # models.UserInfo.objects.create(name=form.cleaned_data['xx'], pwd=form.cleaned_data['yy'])
        return HttpResponse("成功")
    
  • ModelForm组件

    def login(request):
        if request.method == "GET":
        	form = LoginForm()
        	return render(request, "login.html", {"form": form})
        
        form = LoginForm(data=request.POST)
        if not form.is_valid():
            return render(request, "login.html", {"form": form})
        
        form.save() # 自动将数据新增到数据库
        return HttpResponse("成功")
    

1.8.3 更新数据

  • Form组件

    def login(request):
        if request.method == "GET":
        	form = LoginForm(initial={"user": "武沛齐", "pwd": "123"})
        	return render(request, "login.html", {"form": form})
        form = LoginForm(data=request.POST)
        if not form.is_valid():
            return render(request, "login.html", {"form": form})
        
        # form.cleaned_data
        # 手动读取字典,保存至数据库
        # models.UserInfo.objects.create(name=form.cleaned_data['xx'], pwd=form.cleaned_data['yy'])
        # models.UserInfo.objects.filter(id=1).update(name=form.cleaned_data['xx'], pwd=form.cleaned_data['y'])
        return HttpResponse("成功")
    
  • ModelForm组件

    def login(request):
        if request.method == "GET":
        	form = LoginModelForm()
        	return render(request, "login.html", {"form": form})
        
        user_object = model.UserInfo.object.filter(id=1).first()
        form = LoginModelForm(data=request.POST, instance=user_object)
        if not form.is_valid():
            return render(request, "login.html", {"form": form})
        
        form.save() # 更新id=1
        return HttpResponse("成功")
    

1.9 案例

  • 用户登录【Form】
  • 用户管理:增改【ModelForm】

2.Form相关源码

2.1 前置知识点

1.模板渲染

def login(request):
    
    # 1.打开login2.html文件读取内容 + 参数进行“替换” => 渲染  ==> 得到被替换完的字符串
    # 2.将字符串封装HttpReponse对象中,等待给用户返回。
	return render(request, 'login2.html', {"v1": "wupeiqi"})
def render(request, template_name, context=None, content_type=None, status=None, using=None):
    content = loader.render_to_string(template_name, context, request, using=using)
    #    template = get_template(template_name, using=using)
    #    content = template.render(context, request)
    return HttpResponse(content, content_type, status)
from django.shortcuts import HttpResponse
from django.template.loader import get_template


def v1(request):
    template = get_template("v1.html")
    text = template.render({"text": "张开"}, request)
    print(text)

    return HttpResponse("OK")

2.插件相关的类

class Widget(metaclass=MediaDefiningClass):

    def __init__(self, attrs=None):
        self.attrs = {} if attrs is None else attrs.copy()

    def render(self, name, value, attrs=None, renderer=None):
        # name="user" value="zhangkai"  attrs=None   self.attrs={'class': "c1", "id": "xx1"}
        context = self.get_context(name, value, attrs)
        
        return self._render(self.template_name, context, renderer)
    
    def get_context(self, name, value, attrs):
        return {
            "widget": {
                "name": name, # "user"
                "value": self.format_value(value), # "zhangkai"
                "attrs": self.build_attrs(self.attrs, attrs), # {'class': "c1", "id": "xx1"}
                "template_name": self.template_name, # "django/forms/widgets/text.html"
                # "type":"text"
            },
        }

class Input(Widget):
    input_type = None  # Subclasses must define this.
    template_name = "django/forms/widgets/input.html"

    def __init__(self, attrs=None):
        if attrs is not None:
            attrs = attrs.copy()
            self.input_type = attrs.pop("type", self.input_type)
        super().__init__(attrs)


    def get_context(self, name, value, attrs):
        # {"widget":{"name":}   }
        context = super().get_context(name, value, attrs)
        context["widget"]["type"] = self.input_type
        return context
    
class TextInput(Input):
    input_type = "text"
    template_name = "django/forms/widgets/text.html"
    
    
class PasswordInput(Input):
    input_type = "password"
    template_name = "django/forms/widgets/password.html"

    def __init__(self, attrs=None, render_value=False):
        super().__init__(attrs)
        self.render_value = render_value

    def get_context(self, name, value, attrs):
        if not self.render_value:
            value = None
        return super().get_context(name, value, attrs)
from django.shortcuts import HttpResponse
from django.template.loader import get_template

from django import forms


def v1(request):
    template = get_template("v1.html")
    text = template.render({"text": "张开"}, request)
    print(text)

    return HttpResponse("OK")


def v2(request):
    # 1.执行 TextInput的 __init__方法
    obj = forms.TextInput(attrs={'class': "c1", "id": "xx1"})
    data_string = obj.render(name="user", value="张开")
    print(data_string)  # <input type='text' name='user' value="张开" class="c1"  id="xx1" />

    obj2 = forms.PasswordInput(attrs={'class': "c2"}, render_value=True)
    data_string = obj2.render(name="user", value="张开")
    print(data_string)

    return HttpResponse("OK")

3.init和new

class Foo(object):
    def __init__(self,name):
        self.name = name 

# 1. __new__ 去创建空对象 {}   -> 构造方法(创建对象)
# 2. __init__在对象中进行初始化 {"name":"武沛齐"}   -> 初始化方法
obj = Foo("武沛齐")
class Foo(object):
    def __init__(self, name):
        print("init初始化", self)
        self.name = name

    def __new__(cls, *args, **kwargs):
        obj = super().__new__(cls)
        print("new创建对象", obj)
        return obj


instance = Foo("wupeiqi")
print("得到对象", instance)

4.元类

说两句:

  • 默认情况下,类都是由type创建;

    class Info(object):
        city = "背景"
    
        def show(self):
            print("123")
    
    # Info = type("Info", (object,), {"city": "背景", "show": lambda self: print(123)})
    
    obj = Info()
    print(obj.city)
    obj.show()
    
  • 想要由其他的东西创建类,就可以使用metaclass进行指定。

    class Info(object,metaclass=其他):
        city = "背景"
    
        def show(self):
            print("123")
    
    class MyType(type):
        pass
    
    
    class Info(object, metaclass=MyType):
        city = "背景"
    
        def show(self):
            print("123")
    

类是有type创建的,类又可以进行实例化,去创建对象。

class MyType(type):
    # def __init__(self, *args, **kwargs):
    #     super().__init__(*args, **kwargs)

    def __new__(cls, *args, **kwargs):
        clazz = super().__new__(cls, *args, **kwargs)
        clazz.base_declare = [11, 22, 33]
        return clazz


class Info(object, metaclass=MyType):
    city = "背景"

    def show(self):
        print("123")

print(Info.base_declare)

5.isintance

判断某个对象是否是某个类或其子类创建的对象。

class Foo(object):
    pass


class Info(object):
    pass


obj1 = Foo()
obj2 = Foo()

print(isinstance(obj1, Foo))
print(isinstance(obj2, Info))
class Field(object):
    pass


class CharField(Field):
    pass


class EmailField(Field):
    pass


class ImageField(Field):
    pass


obj1 = CharField()
obj2 = EmailField()
obj3 = ImageField()

print(isinstance(obj1, Field))
print(isinstance(obj2, Field))
print(isinstance(obj3, Field))

功能:很多对象可以判断这些对象,都是我Field的子类创建的对象。

2.2 Form组件-定义类

class DeclarativeFieldsMetaclass(MediaDefiningClass):
    """Collect Fields declared on the base classes."""

    def __new__(mcs, name, bases, attrs):
        # Collect fields from current class and remove them from attrs.
        attrs["declared_fields"] = {
            key: attrs.pop(key)
            for key, value in list(attrs.items())
            if isinstance(value, Field)
        }

        new_class = super().__new__(mcs, name, bases, attrs)

        # Walk through the MRO.
        declared_fields = {}
        for base in reversed(new_class.__mro__):
            # Collect fields from base class.
            if hasattr(base, "declared_fields"):
                declared_fields.update(base.declared_fields)

            # Field shadowing.
            for attr, value in base.__dict__.items():
                if value is None and attr in declared_fields:
                    declared_fields.pop(attr)

        new_class.base_fields = declared_fields
        new_class.declared_fields = declared_fields

        return new_class

from django import forms

class Form(BaseForm, metaclass=DeclarativeFieldsMetaclass):
    pass

class LoginForm(forms.Form):
    username = forms.CharField(label="用户名", required=True, widget=forms.TextInput)
    pwd = forms.CharField(label="密码", required=True, widget=forms.PasswordInput)

LoginForm类其实是由DeclarativeFieldsMetaclass创建的【new】【init】。

2.3 Form组件-创建类的对象

from django import forms

class LoginForm(forms.Form):
    username = forms.CharField(label="用户名", required=True, widget=forms.TextInput)
    pwd = forms.CharField(label="密码", required=True, widget=forms.PasswordInput)
form = LoginForm() # __new__   __init__
class BaseForm(RenderableFormMixin):
    field_order = None
    
    def __init__(self,data=None,files=None,auto_id="id_%s",prefix=None,initial=None,....,field_order=None,renderer=None):
        self.fields = copy.deepcopy(self.base_fields)
        self.order_fields(  self.field_order if field_order is None else field_order   )
        self.initial = initial or {}
        
        renderer = get_default_renderer()
        self.renderer = renderer
        
    def order_fields(self, field_order):

        if field_order is None:
            return
        fields = {}
        for key in field_order:
            try:
                fields[key] = self.fields.pop(key)
            except KeyError:  # ignore unknown fields
                pass
        fields.update(self.fields)  # add remaining fields in original order
        self.fields = fields

class Form(BaseForm, metaclass=DeclarativeFieldsMetaclass):
    pass


class LoginForm(forms.Form):
    username = forms.CharField(label="用户名", required=True, widget=forms.TextInput)
    pwd = forms.CharField(label="密码", required=True, widget=forms.PasswordInput)


form = LoginForm(initial={})

2.4 Form组件-对象.字段

class LoginForm(forms.Form):
    username = forms.CharField(label="用户名", required=True, widget=forms.TextInput)
    pwd = forms.CharField(label="密码", required=True, widget=forms.PasswordInput)
def v3(request):
    form = LoginForm()
    print(form['username'])  # form.username <input type="text" name="username" required id="id_username">
    
    return HttpResponse("OK")
class Foo(object):

    def __getitem__(self, item):
        return 999


obj = Foo()

print(obj)
print(obj['xxxx'])
class BoundField:
    "A Field plus data"

    def __init__(self, form, field, name):
        self.form = form    # Form对象
        self.field = field  #  forms.CharField(label="用户名", required=True, widget=forms.TextInput)
        self.name = name    # "username"
        self.html_name = form.add_prefix(name)
        self.html_initial_name = form.add_initial_prefix(name)
        self.html_initial_id = form.add_initial_prefix(self.auto_id)
        if self.field.label is None:
            self.label = pretty_name(name)
        else:
            self.label = self.field.label
        self.help_text = field.help_text or ""

    def __str__(self):
        """Render this field as an HTML widget."""
        return self.as_widget() # <input type="text" name="username" required id="id_username">


    def as_widget(self, widget=None, attrs=None, only_initial=False):

        # 插件对象
        widget = widget or self.field.widget
        
        if self.field.localize:
            widget.is_localized = True
        attrs = attrs or {}
        attrs = self.build_widget_attrs(attrs, widget)
        if self.auto_id and "id" not in widget.attrs:
            attrs.setdefault(
                "id", self.html_initial_id if only_initial else self.auto_id
            )
        if only_initial and self.html_initial_name in self.form.data:
            # Propagate the hidden initial value.
            value = self.form._widget_data_value(
                self.field.hidden_widget(),
                self.html_initial_name,
            )
        else:
            value = self.value()

        # 字符串= 插件forms.TextInput对象.render  《input name='?' class=".."/>
        return widget.render(
            name=self.html_initial_name if only_initial else self.html_name,
            value=value,
            attrs=attrs,
            renderer=self.form.renderer,
        )

2.5 Form组件-可迭代对象

class MyForm(object):
    def __iter__(self):
        return iter([11, 22, 33, 44])


obj = MyForm()
for item in obj:
    print(item)

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

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

相关文章

Qt/QML编程学习之心得:hicar手机投屏到车机中控的实现(32)

hicar,是华为推出的一款手机APP,有百度地图、华为音乐,更多应用中还有很多对应手机上装在的其他APP,都可以在这个里面打开使用,对开车的司机非常友好。但它不仅仅是用在手机上,它还可以投屏到车机中控上,这是比较神奇的一点。 HiCar本质上是一套智能投屏系统,理论上所有…

人工智能复习

机器学习中线性回归和逻辑回归&#xff1a; 机器学习的分类&#xff1a; 监督学习和无监督学习&#xff0c;半监督学习 监督学习&#xff08;Supervised Learning&#xff09;&#xff1a; 监督学习是一种利用带有标签&#xff08;标记&#xff09;的数据进行训练的机器学习…

用友U8流程审批效率-SQLServer+SSRS

文章目录 @[TOC]1、 需求及效果1.1 需求1.2 效果2、 思路及SQL语句3、实现折叠明细表4、结语1、 需求及效果 1.1 需求 想要查看U8的审批流程,查看流程在哪个节点或人停留的时间,这个单据整个流程走下来需要的时间。可以更加直观方便的查看审批效率 1.2 效果 采用了SSRS上…

【算法每日一练]-动态规划 (保姆级教程 篇15) #纸带 #围栏木桩 #四柱河内塔

目录 今日知识点&#xff1a; 计算最长子序列的方案个数&#xff0c;类似最短路径个数问题 四柱河内塔问题&#xff1a;dp[i]min{ (p[i-k]f[k])dp[i-k] } 纸带 围栏木桩 四柱河内塔 纸带 思路&#xff1a; 我们先设置dp[i]表示从i到n的方案数。 那么减法操作中&#xff…

TensorRt(5)动态尺寸输入的分割模型测试

文章目录 1、固定输入尺寸逻辑2、动态输入尺寸2.1、模型导出2.2、推理测试2.3、显存分配问题2.4、完整代码 这里主要说明使用TensorRT进行加载编译优化后的模型engine进行推理测试&#xff0c;与前面进行目标识别、目标分类的模型的网络输入是固定大小不同&#xff0c;导致输入…

Docker中镜像的相关操作

1.辅助操作 docker version&#xff1a;用查看docker客户端引擎和server端引擎版本信息。 docker info&#xff1a;用来查看docker引擎的详细信息。 docker --help&#xff1a;用来查看帮助信息。 2.镜像Image docker images&#xff1a;查看当前本地仓库中存在哪些镜像。 …

Mysql是怎样运行的--下

文章目录 Mysql是怎样运行的--下查询优化explainoptimizer_trace InnoDB的Buffer Pool&#xff08;缓冲池&#xff09;Buffer Pool的存储结构空闲页存储--free链表脏页&#xff08;修改后的数据&#xff09;存储--flush链表 使用Buffer PoolLRU链表的管理 事务ACID事务的状态事…

在CentOS环境下编译GreatSQL RPM包

本文介绍如何在CentOS环境下编译GreatSQL RPM包。 运行环境是docker中的CentOS 8 x86_64&#xff1a; $ docker -v Docker version 20.10.10, build b485636$ docker run -itd --hostname c8 --name c8 centos bash a0a2128591335ef41e6faf46b7e79953c097500e9f033733c3ab37f…

使用curl命令在Linux中进行HTTP请求

在Linux中&#xff0c;curl是一个非常强大的命令行工具&#xff0c;用于发送HTTP请求。它允许用户发送各种类型的HTTP请求&#xff0c;如GET、POST、PUT、DELETE等&#xff0c;并能够处理响应数据。 首先&#xff0c;确保您的Linux系统已经安装了curl。如果未安装&#xff0c;…

Android 13 移除下拉栏中的设置入口

介绍 因为当前项目的设置已被加密&#xff0c;客户不希望通过下拉窗口的设置图标进入设置&#xff0c;决定去掉该图标。 效果展示 分析 这里首先想到在SystemUI寻找这个图标的资源文件&#xff0c;找到资源文件后寻找对应控件调用的地方&#xff0c;根据id寻找控件代码即可。…

2024年Google Ads新手指南——广告运作与类型、工具

谷歌广告投放是出海企业的必备运营动作&#xff0c;但你需要先了解他的运作逻辑、广告类型、投放必备的工具类型&#xff0c;之后可以为你的投放的高速转化做好万全准备&#xff0c;毕竟每一分钱都要花在刀刃上&#xff01;废话不多说&#xff0c;下面开始为新手准备了基础指南…

【LLM】vLLM部署与int8量化

Acceleration & Quantization vLLM vLLM是一个开源的大型语言模型&#xff08;LLM&#xff09;推理和服务库&#xff0c;它通过一个名为PagedAttention的新型注意力算法来解决传统LLM在生产环境中部署时所遇到的高内存消耗和计算成本的挑战。PagedAttention算法能有效管理…

重置 Docker 中 Gitlab 的账号密码

1、首先进入Docker容器 docker exec -it gitlab bash 2、连接到 gitlab 的数据库 需要谨慎操作 gitlab-rails console -e production 等待加载完后会进入控制台 ------------------------------------------------------------------------------------------------------…

Page 251~254 Win32 GUI项目

win32_gui 源代码&#xff1a; #if defined(UNICODE) && !defined(_UNICODE)#define _UNICODE #elif defined(_UNICODE) && !defined(UNICODE)#define UNICODE #endif#include <tchar.h> #include <windows.h>/* Declare Windows procedure */…

知名开发者社区Stack Overflow发布《2023 年开发者调查报告》

Stack Overflow成立于2008年&#xff0c;最知名的是它的公共问答平台&#xff0c;每月有超过 1 亿人访问该平台来提问、学习和分享技术知识。是世界上最受欢迎的开发者社区之一。每年都会发布一份关于开发者的调查报告&#xff0c;来了解不断变化的开发人员现状、正在兴起或衰落…

[机缘参悟-122] :IT人如何认识自己的?自省、面试、考核、咨询?

目录 一、为什么要认识自己 二、认识自己的哪些方面&#xff1f; 三、如何认识自己 3.1 通过自省认识自己 3.2 通过面试认识自己 3.3 通过咨询认识自己 3.4 通过相亲认识自己 3.5 通过一段感情关系认识自己 一、为什么要认识自己 认识自己在人类的成长和心灵发展过程中…

亚马逊实时 AI 编程助手 CodeWhisperer使用体验

文章目录 1&#xff1a;什么是CodeWhisperer &#xff1f;2&#xff1a;试用3&#xff1a;上手体验 1&#xff1a;什么是CodeWhisperer &#xff1f; 最近ChatGPT展现出强大AI能力给我们带来了深刻的影响&#xff0c;AI现在不是一个概念&#xff0c;基于AI的产品一定在各行各业…

Linux网络配置与抓包工具介绍

目录 一、配置命令 1. ifconfig 1.1 概述信息解析 1.2 常用格式 2. ip 2.1 ip link 数据链路层 2.2 ip addr 网络层 2.3 路由 3. hostname 3.1 临时修改主机名 3.2 永久修改主机名 4. route 5. netstat 6. ss 7. ping 8. traceroute 9. nslookup 10. 永久修…

vivado图形化设计篇

一.看懂波形 二.由波形可得真值表 三.可得逻辑表达式 YA(BC) 四. 逻辑框图 五.vivado图形化设计 &#xff08;1&#xff09;创建文件 1.create block desige 2.文件命名&#xff0c;设置文件放置地址 &#xff08;2&#xff09; 添加IP核 1.打开desige&#xff0c;右键&#…

UniRepLKNet实战:使用UniRepLKNet实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集一些问题 摘要 大核卷积神经网络&#xff08;ConvNets&#xff09;近年来受到广泛关注&#xff0c;但仍存在两个关键问题需要进一步研究。首先&#xff0c;目前的大型卷积神经网络架构大…