permissions: permission_list.append(item["permissions__url"]) print(permission_list) request.session...flag = True break if not flag: return HttpResponse("没有访问权限...user: ############################### 在session中注册用户ID###################### request.session...["user_id"]=user.pk ###############################在session注册权限列表#######################...###### # 查询当前登录用户的所有角色 # ret=user.roles.all() # print(ret)# <QuerySet
pk is not None: queryset = queryset.filter(pk=pk) # Next, try looking up by slug...if pk is None and slug is None: raise AttributeError("Generic detail view %s must be called..._meta.verbose_name}) return obj 看了源码发现 get_object,就是返回 单一的对象,相当于 return YouModel.objects.get(...obj = cache.get("article_obj_%s" % pk) # 获取该主键的缓存 if not obj: # 如果没有就 obj = super...(DetailView, self).get_object() # get_object() 重新获取单个对象 cache.set("article_obj_%s" % pk,
authenticate(username='xxx',password='xxxx') #需要提供两个参数,username,password关键字参数 如果auth_user表中存在这个用户,会返回一个user对象...如果用户不存在,返回None 2,login(request,user) login(request,user)主要完成以下:把用户的id放入session表中的数据里 1,注入session信息:request.session...['user_id']=user.pk from django.contrib.auth import authenticate, login def my_view(request):...二、user对象 只要登录过的用户,访问任何视图的时候都可以使用request.user对象,这就是一个user对象,request.user.name就可以拿到用户的名字,request.user.email...除此之外,user对象还拥有以下方法: 1,user对象的is_authenticated() 如果session表里有你的登录记录,那返回值为True,可以用来验证用户是否登录过。
["user_id"]=user.pk request.session["username"]=user.user 设置session方法及原理 第一步: 如果获取到sessionid的值,则更新 if...["user_id"] = user.pk #设置session request.session["username"] = user.user #设置session...print(page.object_list) #第2页的所有数据 结果: , , < Book: title...# 从url获取page值,如果没有获取就默认1 c_page = request.GET.get("page", 1) # 转换为int类型,不然template...": "最小长度不能小于5"}, #自定义错误提示信息 widget=widgets.TextInput(attrs={"class":"form-clontrol"}) #自定义属性
8个方法,接下来一个个分析 类属性 queryset = None serializer_class = None lookup_field = ‘pk’ lookup_url_kwarg = None...如果没什么逻辑,可以直接写在视图的类属性中,如果逻辑比较复杂,也可以重写get_queryset方法用来返回一个queryset对象。...也是可以通过直接设置这个属性,也可以通过重写get_serializer_class来实现。 lookup_field 在检索的时候,根据什么参数进行检索。默认是pk,也就是主键。...__name__ ) # 定义queryset属性,获取父类的queryset,如果父类没有定义类属性`queryset`,那么默认值就是None,就会报上面断言的错误...(query, many=many) # 如果数据对象是queryset对象,many需要为True return APIResponse(results=serializer.data
>>> Person.objects.get(name="Tom") >>> 我们用了一个 .objects.get() 方法查询出来符合条件的对象,但是大家注意到了没有...es 就是 QuerySet 是查询所有的 Entry 条目。...if user: obj = UserModel.objects.get(userName = userName) request.session...['id'] = obj.id request.session['username'] = obj.userName return render...'year':pets.year, 'kind':pets.kind, } #给需要修改的宠物添加初始属性
pk确定唯一操作对象 单操作就走get_object()方法(包括单查,单增等) 3)get_serializer():从类属性serializer_class中获得serializer的序列化类...= BookInfo.objects.all() 提供的关于数据库查询的属性与方法 1.get_queryset() 从类属性queryset中获得model的queryset数据 ,查询多个数据 2....get_object() 从类属性queryset中获得model的queryset数据,再通过有名分组pk来确定唯一操作对象。...获取序列化器对象 详情页视图使用:(也就是在详情的view里面的方法中,我们还可以定义以下两个属性) lookup_field 自定义主键 有名分组的查询,默认是’pk’ lookup_url_kwarg...()方法根据pk参数查找queryset中的数据对象 serializer = self.get_serializer(book) return Response(serializer.data
使用ModelChoiceField方法向前端提供模型 后端 forms.py default_tester = forms.ModelChoiceField( label='测试人员', queryset...=User.objects.all(), required=True ) 前端代码 {% for user in form.default_tester.field.queryset %}...<option value="{{ <em>user.pk</em> }}" {{ user }} </option {% endfor %}
= kwargs.get('pk') ## 将单改群改的数据都格式化成pks=[需要修改的对象主键标识] | request_data = [每个要修改对象对应的的修改数据]...book_query, many=True) book_data = book_ser.data return APIResponse(results=book_data)  代码没有改变...总结: 1.get_queryset():从类属性queryset中获得model的queryset数据 2.get_object():从类属性queryset中获得model的queryset数据,...再通过有名分组pk确定唯一操作对象 当然也可以自定义主键的有名分组名称lookup_field = 'id' 3.get_serializer():从类属性serializer_class中获得serializer...():从类属性queryset中获得model的queryset数据 # 2)get_object():从类属性queryset中获得model的queryset数据,再通过有名分组pk确定唯一操作对象
以下属性控制基本视图行为。 queryset:应用于从此视图返回对象的查询集。通常,必须设置此属性或重写该方法。...通常,必须设置此属性或重写该方法。 lookup_field:应用于执行各个模型实例的对象查找的模型字段。缺省值为 。...self.get_queryset() 获取queryset属性中的所有数据 books = self.get_queryset() # 2、提取所有对象的字段内容...:return: """ # 1、根据pk值查询图书对象 try: # self.get_object()从queryset中获取当前...pk所对应的数据对象 book = self.get_object() except: return Response({'error':
在ViewSet中,没有提供任何动作action方法,需要我们自己实现action方法。..."" # 1、根据pk值查询图书对象 try: book = BookInfo.objects.get(id=pk) except...self.get_queryset() 获取queryset属性中的所有数据 books = self.get_queryset() # 2、提取所有对象的字段内容...:return: """ # 1、根据pk值查询图书对象 try: # self.get_object()从queryset中获取当前...(self): """在视图集中视图对象下面会新增一个action属性,用于获取视图方法名""" if BookInfo.action == "get_top_3":
方法:配置queryset类属性,群查获取QuerySet对象 提供get_object方法:配置lookup_url_kwarg类属性,单查获取单个对象 提供get_serializer方法:配置serializer_class...# 如果只写models.Car.objects的话那就是manager对象,不是QuerySet对象 queryset = models.Car.objects.filter(is_delete...# 如果只写models.Car.objects的话那就是manager对象,不是QuerySet对象 queryset = models.Car.objects.filter(is_delete...= len(car_query): raise Exception('pk对象不存在') except Exception as e:...= len(car_query): raise Exception('pk对象不存在') except Exception as e:
"message": "成功", "results": serializer.data }) # 没有...pk代表群查 else: queryset = Student.objects.all() serializer = StudentModelSerializer...pks') queryset = Student.objects.filter(pk__in=pks) if queryset: queryset.delete()...Response({ "status": 1, "message": "删除失败", }) 单局部改 单局部改instance=要被更新的对象..."status": 1, "message": "失败", }) 总结 APIView视图类就是做增删改查的操作,当然APIView中还继承了一些常用的属性
列表视图与详情视图通用 queryset 应用于从此视图返回对象的查询集。通常,您必须设置此属性或覆盖该get_queryset()方法。...如果您要覆盖视图方法,请务必调用get_queryset()而不是直接访问此属性。 serializer_class 应该用于验证和反序列化输入以及序列化输出的序列化器类。...通常,您必须设置此属性或覆盖该get_serializer_class()方法。 详情视图使用 lookup_field 应该用于执行单个模型实例的对象查找的模型字段。默认为’pk’....方法 列表视图与详情视图通用 get_queryset(self) 返回视图使用的查询集,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写,例如: def get_queryset...详情视图使用 get_object(self) 返回详情视图所需的模型类数据对象,默认使用lookup_field参数来过滤queryset。 在视图中可以调用该方法获取详情信息的模型类对象。
注意: 该方法在提供序列化器对象的时候,会向序列化器对象的context属性补充三个数据:request、format、view,这三个数据对象可以在定义序列化器时使用。...-request 当前视图的请求对象 -view 当前请求的类视图对象 -format 当前请求期望返回的数据格式 提供的关于数据库查询的属性与方法 属性:queryset 指明使用的数据查询集...方法: get_queryset(self) :返回视图使用的查询集,主要用来提供给Mixin扩展类使用,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写 get_object...要传queryset对象,查询了所有的图书 # serializer_class使用哪个序列化类来序列化这堆数据 queryset = Book.objects # queryset...**在ViewSet中,没有提供任何动作action方法,需要我们自己实现action方法。
最初的 QuerySet (q1) 没有受到筛选的影响。 查询集是延迟的 QuerySets 是惰性的 – 创建 QuerySet 的动作不涉及任何数据库操作。...与 entry 相关联,Django 会认为它没有 name 属性,而不会因为不存在 author 抛出异常。...以最上面的 models 为例,一个 Entry 对象 e 能通过 blog 属性获得相关联的 Blog 对象: e.blog。...例如,一个 Blog 类的实例 b 对象通过 entry_set 属性得到所有相关联的 Entry 对象列表: b.entry_set.all()。...AttributeError: "Manager must be accessed via instance".
在ViewSet中,没有提供任何动作action方法,需要我们自己实现action方法。...-GenericAPIView 继承了APIView,封装了一些属性和方法,跟数据库打交道 -queryset = None # 指定序列化集 -serializer_class =...None # 指定序列化类 -lookup_field = 'pk' # 查询单条,分组分出来的参数,转换器对象参数的名字 -filter_backends # 过滤排序功能会用它...>', views.BookViewDetail.as_view()) 总结:到第二层只需修改queryset和serializer_class类属性即可,其余都不需要修改 注意:虽然pk没有在orm语句中过滤使用...在视图集中,我们可以通过action对象属性来获取当前请求视图集时的action动作是哪个。
方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...属性: model: 视图要显示的模型 queryset: 表示对象的一个查询集.queryset的值优先于model的值. template_name: 字符串表示的模板名称. context_object_name...方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg...属性: tamplate_name: success_url: model: queryset: context_object_name: pk_url_kwarg: **方法:* get_object
Blog(name=’Foo’, tagline=’Bar’) >>> b.objects Traceback: … AttributeError: “Manager isn’t accessible... via Blog instances.” 1、检索所有的对象 >>> all_entries = Entry.objects.all() 使用all()方法返回数据库中的所有对象。...2、检索特定的对象 使用以下两个方法: fileter(**kwargs) 返回一个与参数匹配的QuerySet,相当于等于(=). ...exclude(**kwargs) 返回一个与参数不匹配的QuerySet,相当于不等于(!=)。... for p in queryset] # Re-use the cache from the evaluation.、 这样利用缓存,减少访问数据库的次数。
1)属性 基本属性: queryset: 用于返回query对象集合,也可以使用get_queryset()方法。...lookup_field: 模型的字段应该用于执行对象查找个别的模型实例 lookup_url_kwarg:URL应该用于对象查找关键字参数 分页属性: pagination_class: 用于返回一个分页列表视图的分页类...ListModelMixin:提供list方法,列出queryset CreateModelMixin: 提供create方法,创建和保存一个Model对象 RetrieveModelMixin:提供retrieve...RetrieveModelMixin,UpdateModelMixin,DestroyModelMixi 5、视图集合ViewSets 允许将一组相关的逻辑视图在一个类,ViewSet类是一个简单类型的基于类的观点,没有提供任何方法处理程序如...=None): pass 可以通过访问^users/{pk}/set_password/$来访问改视图 ViewSets的API参考 .ViewSet: 继承了APIView,可以使用一些标准的属性例如
领取专属 10元无门槛券
手把手带您无忧上云