10.1、Django框架简介、创建第一个应用

news2024/11/19 17:52:38

文章目录

  • 预备知识
    • MVC模式和MTV模式
      • MVC模式
      • MTV 模式
  • Django框架
    • Django框架简介
    • Django框架的应用
      • 启动后台admin站点管理
        • 数据库迁移
        • 创建管理员用户
        • 管理界面本地化
      • 创建并使用一个应用bookapp
      • 项目的数据库模型
        • 创建数据库模型
        • 生成数据库表
        • 数据库上的基本操作
      • 启用后台admin站点管理
        • 自定义模型加入后台管理
        • 自定义后台管理页面
          • 列表页属性list_display:显示字段,可以点击列头进行排序
          • 列表页属性list_filter:过滤字段,过滤框会出现在右侧
          • 列表页属性search_fields:搜索字段,搜索框会出现在上侧
          • 列表页属性list_per_page:分页,分页框会出现在下侧
          • 列表页属性list_display_links,给选项添加链接
          • 添加、修改页属性
          • 关联对象


预备知识

HTTP协议就是客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。
基于TCP/IP

  • HTTP是一个属于应用层的面向对象的协议
  • HTTP协议工作于客户端-服务端架构上。

基于请求-响应模式

– 浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

  • Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。
无状态协议:客户端的每次请求都是一个新的请求,不会记录之前的通信状态。

无状态解决办法:

  • 通过cookie,记录客户端之前的请求信息
  • 通过Session会话保存。

HTTP请求中常见的请求方式:
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

  • HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
  • HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/4a93c139650b4ee599483ec70112b2e4.png

MVC模式和MTV模式

MVC模式

MVC 就是把Web应用分为模型(M),控制器( C )和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射( ORM ),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求。
在这里插入图片描述

MTV 模式

MTV模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,在
Python的世界中,基本(除了Pylons)都使用了 MVC 的变种 MTV (Model Templates View 模型-模板-视图)。
Django 的MTV分别是值:
M 代表模型(Model): 负责业务对象和数据库的关系映射( ORM )。
T 代表模板 (Template):负责如何把页面展示给用户( html )。
V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template。

Django框架

Django框架简介

  • 什么是框架?
    软件框架就是为实现或完成某种软件开发时,提供了一些基础的软件产品,
    框架的功能类似于 基础设施 ,提供并实现最为基础的软件架构和体系
    通常情况下我们依据框架来实现更为复杂的业务程序开发
    框架就是程序的骨架

  • Python 中常见的框架有哪些?
    大包大揽 Django 被官方称之为完美主义者的Web框架。
    力求精简 web.py 和 Tornado
    新生代微框架 Flask 和 Bottle

Django 是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计。Django 具有超强扩展性以及安全性(能帮助开发人员避开许多常见的安全错误)。

Django框架的应用

在pycharm中创建Django项目
在这里插入图片描述

目录说明:
manage.py :一个命令行工具,允许你用多种方式对 Django 项目进行交互
内层的目录:项目的真正的Python包
_ _ init _ _.py :一个空文件,它告诉Python这个目录应该被看做一个Python包
settings.py :项目的配置
urls.py :项目的URL声明,进行路由配置
wsgi.py :项目与 WSGI 兼容的Web服务器入口
asgi.py :客户端和服务端发生推送的网关接口

创建完项目,进入terminal,执行python manage.py runserver启动项目
在这里插入图片描述在这里插入图片描述

启动后台admin站点管理

Django框架能自动生成后台管理系统

站点分为“内容发布(后台管理)”和“公共访问(前台管理)”两部分
“内容发布”的部分负责添加、修改、删除内容,开发这些重复的功能是一件单调乏味、缺乏创造力
的工作。因此, Django 会根据定义的模型类完全自动地生成管理模块。
Django 框架中有一个非常强大的应用功能: 能自动管理界面。 常被Web平台管理者使用,去管理整个Web平台。

数据库迁移

默认数据是保存在sqlite(文件型数据库)中的。
在这里插入图片描述使用这些 Django 自带的应用程序,需要我们在数据库中创建一些数据表对应,然后才能使用它们。

在ptcharm 的 tools ---> run manage.py task 能打开manage的自动补齐功能

python manage.py makemigrations这个命令是记录对数据的更改,并生成一个迁移文件。但是这个命令并没有作用到数据库。
执行python manage.py migrate 命令时,这条命令的主要作用就是把这些改动作用到数据库,比如创建数据表,或者增加字段属性

在这里插入图片描述此时,双击db.sqlite3,进入数据库能查看到已经数据库中多了很多表。再次启动django项目。
在这里插入图片描述

创建管理员用户

浏览器输入http://127.0.0.1:8000/admin,显示管理员登录界面。但是此时还没有用户。需要先创建用户。
在这里插入图片描述

在terminal,使用命令python manage.py createsuperuser创建超级用户admin。使用admin登录,能看到管理用户和组的界面。

在这里插入图片描述

管理界面本地化

编辑 settings.py 文件,设置编码、时区

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

不用重新启动,直接刷新界面就能汉化的server服务
在这里插入图片描述

创建并使用一个应用bookapp

  • 创建第一个应用程序

Django 自带一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不是创建目录。
在一个项目中可以创建一到多个应用,每个应用进行一种业务处理。
执行创建应用的命令:
在这里插入图片描述应用的目录结构为:
在这里插入图片描述

  • 编写视图函数

视图:对用户的请求(request)进行业务逻辑操作,最终返回给用户一个响应(response)

打开文件 bookapp/views.py 并放入以下Python代码:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.

def index(request):
    print('用户请求的路径为:',request.path)
    return HttpResponse('图书管理系统')
  • 编写路由规则

浏览器访问index/的时候,执行index视图函数

在这里插入图片描述浏览器输入index/路径,访问测试:

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

现在还有一个问题:当项目的子应用特别多的时候,如果将每个子应用的路由规则都写在项目的urls.py文件(主路由)中,那么该文件就会变得非常大且乱。
能不能将项目的子应用路由就写在子应用的目录下,然后在项目主路由里调用呢?

在项目主路由文件urls.py文件编写:

from django.contrib import admin
from django.urls import path, include

from bookapp.views import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/', include('bookapp.urls')) #当用户请求/book/时,访问bookapp/urls.py子路由文件
]

在子应用下创建子路由 bookapp/urls.py 文件,填写如下内容:

from django.urls import path
from bookapp import views

urlpatterns=[
    # name表示给index起的别名
    path(r'', views.index, name='index') #当访问路径book/的时候,执行views.index视图函数
]

bookapp/views.py 视图函数内容为:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.

def index(request):
    print('用户请求的路径为:',request.path)
    return HttpResponse('图书管理系统')

重新启动项目,浏览器测试输入测试:【Django项目如果只是修改,那么不需要重新启动,如果创建了文件,需要重新启动才能生效
在这里插入图片描述
在这里插入图片描述

还可以在 bookapp/views.py 视图函数中增加一些HTML样式:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.

def index(request):
    print('用户请求的路径为:',request.path)
    return HttpResponse('<h1 style="color:red">图书管理系统</h1>')

在这里插入图片描述

项目的数据库模型

创建数据库模型

python如何操作数据库呢?
ORM(object relationship mapping)对象关系映射。其通过面向对象的方式对数据库做更删改查,不需要再写SQL语句。

本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书、英雄。图书-英雄的关系为一对多
图书表结构设计:表名: Book
图书名称: title
图书发布时间: pub_date
英雄表结构设计: 表名: Hero
英雄姓名: name
英雄性别: gender
英雄简介: hcontent
所属图书: hbook

首先在项目的settings.py文件中指定包含该app,
在这里插入图片描述在bookapp/models.py编写类Book:
在这里插入图片描述
注意:
一个类就对应一个表
book类继承类models.Model,能自动创建一个表,表的名字为app名_类名小写(此实例中表名为bookapp_book)。数据库表结构中,有一列是隐藏的,叫id,如果不指明主键,那么id是主键。另外,类的属性名也作为列名,即name列和pub_date列。

对数据更改生成迁移文件,并将其写入数据库:

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述
能看到在子应用目录migrations下新增了0001_initial.py迁移文件,并且在数据库中多了bookapp_book表。表的结构和0001_initial.py迁移文件正好对的上。

bookapp/models.py中接着创建Hero类。

from django.db import models
# 类对应数据库表,表名称默认为bookapp_book
# 属性对应数据库表的列名
class Book(models.Model):
    name = models.CharField(max_length=40, verbose_name="书籍名称")
    pub_date = models.DateField(verbose_name="出版日期")
# 类对应数据库表,表名称默认为bookapp_hero
class Hero(models.Model):
    gender_choice = [
        (1,"男"),
        (2,"女")
    ]
    name = models.CharField(max_length=20, verbose_name="人物名称")
    gender = models.IntegerField(choices=gender_choice, verbose_name="性别")
    content = models.TextField(max_length=1000, verbose_name="人物描述")
    # 外键关联,如果删除书籍,那么hero对应的书籍设置为空
    book_id=models.ForeignKey(Book,on_delete=models.SET_NULL,null=True,verbose_name="书籍id")

此时,两个表是通过外键关联。注意,书籍:英雄=1:n,一对多. 此时外键写在多的一端。
其中,on_delete表示级联删除,如果表Book被删除,那么Book中的hero需要删除吗?
on_delete为models.CASCADE,则表示级联删除,如果Book被删除,那么Book中的hero也删除。
on_delete为models.PROTECT,则删除Book,会抛出异常,防止删除被引用的对象。
on_delete为models.RESTRICT。则也会抛出异常。
on_delete为models.SET_NULL,则删除Book,Hero表中就会变成null
on_delete为models.SET_DEFAULT,则删除Book,Hero表中就会变成默认值。

生成数据库表

生成迁移文件,并应用至数据库

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

数据库上的基本操作

安装 ipython,交互更加友好的python解释器
在这里插入图片描述

在这里插入图片描述
数据库表中的一条记录对应面向对象变成里的一个对象

在这里插入图片描述
为了能友好的查看类的信息,需要在类中定义 _ _ str _ _ 方法

在bookapp/models.py中添加魔术方法_ _ str_ _(self),便于字符串的友好展示:

from django.db import models
# 类对应数据库表,表名称默认为bookapp_book
# 属性对应数据库表的列名
class Book(models.Model):
    name = models.CharField(max_length=40, verbose_name="书籍名称")
    pub_date = models.DateField(verbose_name="出版日期")
    def _ _str_ _(self): # 魔术方法,字符串的友好展示,便于调试
        return self.name
    
# 类对应数据库表,表名称默认为bookapp_hero
class Hero(models.Model):
    gender_choice = [
        (1,"男"),
        (2,"女")
    ]
    name = models.CharField(max_length=20, verbose_name="人物名称")
    gender = models.IntegerField(choices=gender_choice, verbose_name="性别")
    content = models.TextField(max_length=1000, verbose_name="人物描述")
    # 外键关联,如果删除书籍,那么hero对应的书籍设置为空
    book_id=models.ForeignKey(Book,on_delete=models.SET_NULL,null=True,verbose_name="书籍id")  
    def _ _str_ _(self): # 魔术方法,字符串的友好展示,便于调试
        return self.name

退出当前shell,重新进入新的shell,
在这里插入图片描述
在这里插入图片描述
如何根据条件搜索并查看呢?
QuerySet是一个对象列表
在这里插入图片描述
在这里插入图片描述
创建关联对象,,如何创建关联:使得外键指向另一个对象
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

更多查询操作:参考官方文档
https://docs.djangoproject.com/zh-hans/4.1/

启用后台admin站点管理

自定义模型加入后台管理

目前访问http://127.0.0.1:8000/admin/能看到admin只能管理用户和组,无法管理Book和Hero
在这里插入图片描述
在应用的后台管理配置文件bookapp/admin.py文件中注册模型
在这里插入图片描述刷新页面,就能看到bookapp应用,能进行Book管理和Hero管理

在这里插入图片描述
但是bookapp管理是英文展示,如何汉语展示呢
编辑 bookapp/models.py 文件:

from django.db import models
# 类对应数据库表,表名称默认为bookapp_book
# 属性对应数据库表的列名
class Book(models.Model):
    name = models.CharField(max_length=40, verbose_name="书籍名称")
    pub_date = models.DateField(verbose_name="出版日期")
    def __str__(self): # 魔术方法,字符串的友好展示,便于调试
        return self.name

    class Meta:
        verbose_name="图书管理" # 单数时显示的名称
        verbose_name_plural=verbose_name # 复数时显示的名称

# 类对应数据库表,表名称默认为bookapp_hero
class Hero(models.Model):
    gender_choice = [
        (1,"男"),
        (2,"女")
    ]
    name = models.CharField(max_length=20, verbose_name="人物名称")
    gender = models.IntegerField(choices=gender_choice, verbose_name="性别")
    content = models.TextField(max_length=1000, verbose_name="人物描述")
    # 外键关联,如果删除书籍,那么hero对应的书籍设置为空
    book_id=models.ForeignKey(Book,on_delete=models.SET_NULL,null=True,verbose_name="书籍id")
    def __str__(self): # 魔术方法,字符串的友好展示,便于调试
        return self.name
    
    class Meta:
        verbose_name="人物管理" # 单数时显示的名称
        verbose_name_plural=verbose_name # 复数时显示的名称

刷新页面即可看到汉化效果
在这里插入图片描述
另外Meta中也可以写展示的顺序等,有很多选项
可以参考官网https://docs.djangoproject.com/zh-hans/4.1/ref/models/options/

自定义后台管理页面

参考官方文档:https://docs.djangoproject.com/zh-hans/4.1/ref/contrib/admin/
目前的管理页面还存在一些问题:
比如人物的信息显示的太少了
在这里插入图片描述图书的信息显示的太少了
在这里插入图片描述编辑 bookapp/admin.py 文件:

列表页属性list_display:显示字段,可以点击列头进行排序

在这里插入图片描述

在这里插入图片描述

列表页属性list_filter:过滤字段,过滤框会出现在右侧

在这里插入图片描述

刷新页面,多了一个过滤器的功能,按照发布日期筛选

在这里插入图片描述

列表页属性search_fields:搜索字段,搜索框会出现在上侧

在这里插入图片描述刷新页面:
在这里插入图片描述

列表页属性list_per_page:分页,分页框会出现在下侧

首先多增加几本图书
在这里插入图片描述设定每页显示5条记录
在这里插入图片描述
在这里插入图片描述

列表页属性list_display_links,给选项添加链接

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

添加、修改页属性

在这里插入图片描述在这里插入图片描述刷新页面:
在这里插入图片描述

关联对象

对于 Hero 模型类,有两种注册方式
方式一:与 Book 模型类相同
方式二:关联注册
admin.StackedInline : 内嵌关联注册类
admin.TabularInline : 表格关联注册类
在这里插入图片描述

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

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

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

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

相关文章

Vue框架--Ruoyi解析(前端)

路由router注册 router目录下的 index.js 配合 permission.js 是整套vue前端项目的权限判断核心. index.js 里面的path 配置都是一些不会与权限挂钩的路由,例如: 404、登录页面路径等. permission.js 中的 router.beforeEach 是路由拦截,在访问某个链接之前会进行权限判断,但是…

Mob教你汇总常见的用户注册和登录方式

目前市面上APP的常见的用户注册和登录方式有三种&#xff0c;第一种是最早期的手机号码密码登录&#xff0c;第二种是常见的 手机号码短信验证码&#xff0c;第三者是最新推出&#xff0c;且正被各大应用APP接入采用的" 一键登录"秒验方式。本文从运行方式、优势、劣…

【Leetcode】965. 单值二叉树、100. 相同的树、572. 另一棵树的子树

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 965. 单值二叉树 100. 相同的树 572. 另一棵树的子树 965. 单值二叉树…

蓝桥杯,我劝你不要参加的8个完美理由

蓝桥杯&#xff0c;是一个全国高校的IT技术比拼&#xff0c;如果你参加了&#xff0c;可能不止是刷题数量的剧增&#xff0c;还有你的软件人生 我劝你不要参加&#xff0c;因为如果你参加了&#xff0c;可能会有以下烦恼&#xff1a; 目录 1、会让你变得上进 2、会提前感受码…

OpenCV inRange 函数使用详解

本文是 OpenCV图像视觉入门之路的第6篇文章&#xff0c;本人详细的解决了RGB转HSV&#xff0c;HSV通过AI来进行HSV转 inRange() 函数的范围值操作&#xff0c;简单全面的解决了OpenCV对于图像中某个颜色的分析工作&#xff0c;本文通过识别红色区域和蓝色区域来编写示例程序和博…

从交互设计师的角度,聊聊设计工具的那些事

工欲善其事&#xff0c;必先利其器&#xff0c;这句话是出自论语&#xff0c;讲的是要做好一件事&#xff0c;工具是非常重要的&#xff0c;作为一个设计师&#xff0c;设计工具对于我们的重要性毋庸置疑&#xff0c;每天都在接触&#xff0c;也有很多感悟和心得。 我从事设计…

羟基生物素(Biotin-OH),生物素引发剂(Biotin-Cl)

产品名称&#xff1a;羟基生物素&#xff0c;生物素引发剂 英文名称&#xff1a;Biotin-Cl&#xff0c;Biotin-OH 含biotin-DSPE的胰岛素脂质体 合成生物素一硬脂酥磷脂酥乙醇胺(biotin-DSPE),制备含 biotin-DSPE 的胰岛素脂质体,以粒径和包封率为指标 制备生物素修饰的胰岛素…

如何通过视频推广的方式帮助外贸B2B企业获得询盘

会有外贸企业比较烦恼&#xff0c;总是寻找不到精准客户&#xff0c;也很少有客户向自己询盘&#xff0c;企业需要订单&#xff0c;自己的品牌想要在目标市场被知晓&#xff0c;如何解决这些问题呢&#xff1f;我们可以跟随现阶段流行的趋势——视频推广&#xff0c;接下来请慢…

函数作图的技巧(高数)

前言 从初中开始&#xff0c;我们就开始用笔在平面直角坐标系上作函数图象。随着对函数研究的不断深入&#xff0c;对作出的函数图象的精准度的要求也越来越高。以往我们只需要描一下点&#xff0c;在将点连起来即可。但用这种方法的话偏差可能会很大&#xff0c;所以我们不妨…

数据仓库基础与Apache Hive入门

数据仓库基本概念 数据仓库&#xff0c;简称数仓&#xff0c;用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持。 数据仓库本身并不生产任何数据&#xff0c;其数据来源于不同的外部系统同时数据仓库自…

前端工程化与 webpack:webpack 中的 loader

1. loader 概述 在实际开发过程中&#xff0c;webpack 默认只能打包处理以 .js 后缀名结尾的模块。其他非 .js 后缀名结尾的模块&#xff0c; webpack 默认处理不了&#xff0c;需要调用 loader 加载器才可以正常打包&#xff0c;否则会报错&#xff01; loader 加载器的作用…

【JavaEE】【Servlet API详解】重点!!!

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录【Servlet API概述】【HttpServlet】【HttpServletRequest】【HttpServletResponse】写例子&#xff1a;表白墙表白墙参考代码小结坚持一定很酷&#xff01; 【Servlet API概述】 API其实就是一组类/方法Servlet提…

CANoe-VN5000设备的指示灯含义

我们以VN5650为例: Power 当设备通电时,Power灯亮起 Sync 当设备同步时,Sync灯亮起。Vector设备有三种时间同步方式:PTP、HW-SYNC、SW-SYNC ColorSync StateDescriptionOffNot Configured此设备没有激活的主协议或从协议,或者尚未加载配置OrangeConfigured, waiting for …

Redis布隆过滤器

什么是布隆过滤器 布隆过滤器(Bloom Filter)是一个二进制向量和一系列随机映射函数实现&#xff0c;用于判断一个元素是否在集合中。 如果想要判断一个元素是不是在一个集合里&#xff0c;一般想到的是将所有元素保存起来&#xff0c;然后通过比较确定。链表&#xff0c;树等…

Three JS 调研

0. 结论 three.js是使用WebGL来绘制三维效果的&#xff0c;核心数据是3D对象和三维模型&#xff0c;更多的是关注如何通过webgl更精细而美的渲染数据 three.js相当于封装了webgl&#xff0c;但还是很底层&#xff0c;并不是一个类似于cesium或者mapbox这样的成熟地图框架&…

一文掌握MyBatis的动态SQL使用与原理

摘要&#xff1a;使用动态 SQL 并非一件易事&#xff0c;但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言&#xff0c;MyBatis 显著地提升了这一特性的易用性。本文分享自华为云社区《MyBatis详解 - 动态SQL使用与原理》&#xff0c;作者&#xff1a;龙哥手记 。 动态 …

Ajax(JavaWeb-Ajax、跨域等)

1.JavaWeb - Ajax 概念&#xff1a;AJAX&#xff08;Asynchronous Java JavaScript And Xml &#xff09;&#xff1a;异步的JavaScript和Xml AJAX作用&#xff1a; 与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 使用…

笔试训练(6)

笔试题1:将一个字符串转化成整数:把字符串转换成整数__牛客网 将一个字符串转化成整数&#xff0c;要求不能使用字符串转化成整数的库函数&#xff0c;数值为0或者字符串不是一个合法的数值那么返回0 输入描述:输入一个字符串&#xff0c;包含数字字母符号&#xff0c;可以为空…

【八股文大白话整理】

Java 重载和重写的区别 这两个都是多态的一种表现形式。 重载是在编译器通过方法中形参的静态类型确定调用方法版本的过程&#xff0c;是多态在编译期的表现形式。判定只有两个条件&#xff1a;1. 方法名一致 2. 形参列表不同 重写是在方法运行时&#xff0c;通过调用者的实际…

Transforming the Latent Space of StyleGAN for Real Face Editing翻译

点击下载论文 摘要 尽管最近在使用StyleGAN进行语义处理方面取得了进展&#xff0c;但真实人脸的语义编辑仍然具有挑战性。W空间和W空间之间的差距要求在重构质量和编辑质量之间进行权衡。为了解决这个问题&#xff0c;我们建议通过用基于注意力的transformers替换StyleGAN映射…