VS2010 里的调试-> 启动新实例是干嘛的?和直接F5有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2010 里的调试-> 启动新实例是干嘛的?和直接F5有啥区别?相关的知识,希望对你有一定的参考价值。

这是项目上点右键的菜单吧,看图标可以看出来,都是Start Debugging功能。
然而F5是默认Start Debugging你设置的启动项目。(也就是粗体项目名的项目)
这里是StartDebugging当前你右键的项目。追问

我启动的都是同一个项目,为啥F5的时候会报错,但是启动新实例却可以正常运行呢?


这个图是按F5的时候报的错。 启动新实例不会报这个错

追答

原来是C++
那么,两个debug操作的在内部引用路径上可能不同。
include的时候使用尖括号或双引号都试试看。不行我也帮不了你了我对C++不熟。

参考技术A vs2010启动新实例则是着重讲解新增的几点特性(相当于说明帮助,并不调试);
(1)C# 4.0中的动态类型和动态编程;  
(2)多显示器支持;   
(3)使用Visual Studio 2010的特性支持TDD;   
(4)支持Office ;   
(5)Quick Search特性;
直接F5则跳过此步骤,直接调试。

DRF Serializer 的many参数是干嘛的

Django rest framework

什么时候需要用many参数呢?

  • 当构造序列化的时候,传递的参数的QuerySet实例,就需要用many=True参数,即便QuerySet长度为0或者长度为1
  • 当构造序列化的时候,传递的参数的某个模型实例(内置的User实例,或者自定义的模型实例),就需要用many=false参数

源码解析

class BaseSerializer(Field):
    def __init__(self, instance=None, data=empty, **kwargs):
        self.instance = instance
        if data is not empty:
            self.initial_data = data
        self.partial = kwargs.pop(\'partial\', False)
        self._context = kwargs.pop(\'context\', {})
        kwargs.pop(\'many\', None)
        super().__init__(**kwargs)
        
    def __new__(cls, *args, **kwargs):
        if kwargs.pop(\'many\', False):
            return cls.many_init(*args, **kwargs)
        return super().__new__(cls, *args, **kwargs)

    @classmethod
    def many_init(cls, *args, **kwargs):

        allow_empty = kwargs.pop(\'allow_empty\', None)
        child_serializer = cls(*args, **kwargs)
        list_kwargs = {
            \'child\': child_serializer,
        }
        if allow_empty is not None:
            list_kwargs[\'allow_empty\'] = allow_empty
        list_kwargs.update({
            key: value for key, value in kwargs.items()
            if key in LIST_SERIALIZER_KWARGS
        })
        meta = getattr(cls, \'Meta\', None)
        list_serializer_class = getattr(meta, \'list_serializer_class\', ListSerializer)
        return list_serializer_class(*args, **list_kwargs)

当使用如下的语句进行序列化操作的时候。
serializer = TweetSerializer(queryset, many=True)
queryset会被赋值给BaseSerializer对应的构造方法def __init__(self, instance=None, data=empty, **kwargs):中的instance参数。
当instance参数接受的是QuerySet实例,就需要加many=True,如果instance接受的某个模型实例,例如TweetModel

class TweetAPIView(mixins.ListModelMixin,
                   mixins.CreateModelMixin,
                   GenericAPIView
                   ):
    queryset = TweetModel.objects.all()
    serializer_class = TweetCreateSerializer

    def get(self, request: Request):
        return self.list(request)

    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        serializer = TweetSerializer(queryset, many=True)
        return Response(serializer.data)

    def post(self, request: Request):
        return self.create(request)
class TweetModel(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    title = models.CharField(max_length=32, verbose_name=\'标题\')
    content = models.TextField(verbose_name=\'正文\')

    photos = models.ManyToManyField(Photo, blank=True)
    likes_count = models.BigIntegerField(default=0, null=True)
    comments_count = models.BigIntegerField(default=0, null=True)
    read_count = models.BigIntegerField(default=0, null=True)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        index_together = ((\'user\', \'created_at\'),)

    def __str__(self):
        # 这里是你执行 print(tweet instance) 的时候会显示的内容
        return \'{} {}: {}\'.format(self.created_at, self.user, self.content)

以上是关于VS2010 里的调试-> 启动新实例是干嘛的?和直接F5有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

新手学C++,用vs2010运行书上的一个实例时出现问题,求解~~

iis的问题

为啥我调试时 Visual Studio 会启动多个 WebDev?

vs2010边调试边编辑后台.cs文件的办法

在 VS Code 中调试 Flutter Web 应用,无需创建 Microsoft Edge 新实例

vs2010 调试快捷键