微信公众号开发实现点击返回按钮就返回到聊天界面

 pushHistory();

2
3 function pushHistory() {
4 var state = {
5 title: “title”,
6 url: “#”
7 };
8 window.history.pushState(state, “title”, “#”);
9 }
10
11 if (typeof window.addEventListener != “undefined”) {
12 window.addEventListener(“popstate”, function (e) {
13 WeixinJSBridge.call(‘closeWindow’);
14 }, false);
15 } else {
16 window.attachEvent(“popstate”, function (e) {
17 WeixinJSBridge.call(‘closeWindow’);
18 });
19 }

复制代码
1 pushHistory();
2
3 function pushHistory() {
4 var state = {
5 title: “title”,
6 url: “#”
7 };
8 window.history.pushState(state, “title”, “#”);
9 }
10
11 $(function() {
12 wx.config({
13 debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
14 appId: ‘@ViewBag.AppID’, // 必填,公众号的唯一标识
15 timestamp: ‘@ViewBag.TimeStamp’, // 必填,生成签名的时间戳
16 nonceStr: ‘@ViewBag.NonceStr’, // 必填,生成签名的随机串
17 signature: ‘@ViewBag.Signature’, // 必填,签名,见附录1
18 jsApiList: [
19 ‘checkJsApi’,
20 ‘hideOptionMenu’,
21 ‘scanQRCode’,
22 ‘closeWindow’
23 ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
24 });
25
26 wx.ready(function() {
27 wx.hideOptionMenu();
28 });
29
30 if (typeof window.addEventListener != “undefined”) {
31 window.addEventListener(“popstate”, function(e) {
32 wx.closeWindow();
33 }, false);
34 } else {
35 window.attachEvent(“popstate”, function(e) {
36 wx.closeWindow();
37 });
38 }
39 });

一个让人很郁闷的问题 DRF

今天在在处理一个嵌套结构API 的时候遇到一个很无语的问题: 开始我这样写,是因为 username 只有一个

   def get_host(self,obj):

    h = User.objects.filter( username = 'wow')
    result = HostSerializer(h)
    return result.data

注意,他的报错信息:

Got AttributeError when attempting to get a value for field `username` on serializer `HostSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `QuerySet` instance.
Original exception text was: 'QuerySet' object has no attribute 'username'.

强制加上 many = True 就好了!没想到只有一个也需要加上 many

    def get_host(self,obj):

    h = User.objects.filter( username = 'wow')
    result = HostSerializer(h,many=True)
    return result.data

django 查询过滤的问题

这种形式能完成查询一个属性有多个值的情况

User.objects.filter(username__in=['user1','user2'])

同样这个也可以

groups = Group.objects.filter(player=p1).filter(player=p2)

如果你要查询一个更复杂的情况

filter_dict = disc()
把相关值打包放进去

User.objects.filter(**filter_disc)

#我查到另外一个但是不行!

class AppRightManageListView(ListView): template_name = ‘rightmanage/list_apprightmanage.html’ # model = DeployPool paginate_by = 50

def get_queryset(self):
    filter_dict = dict()
    if self.request.GET.get('search_pk'):
        filter_dict['name__contains'] = self.request.GET.get('search_pk')
    if self.request.GET.get('app_name'):
        filter_dict['id'] = self.request.GET.get('app_name')
    if self.request.GET.get('site_name'):
        app_id_list = []
        site = Site.objects.get(id=self.request.GET.get('site_name'))
        for app in site.app_name.all():
            app_id_list.append(app.id)
        filter_dict['id__in'] = app_id_list
    return App.objects.filter(**filter_dict)

没有系统的输入其实都是在浪费时间

之前谈到一些无关的信息不要关注,因为对自己没有用。
今天系统的说下为什么对自己没有用

原因一: 知识不够系统

平常我们输入的信息,有些会被我们忘记,有些我们理解后会变成知识。但是变成知识也不够
这个信息即使能变成知识也无法和你大脑中的其他已经掌握的知识互联起来,这样你将来需要使用这个知识点的时候,就无法提取。

简单的说就是没有形成知识晶体。

原因二 无法重现和加强

知识只是自己完成一次输入,和多次提取之后,才能形成能力。

但是平常琐碎的知识,往往是没有机会来实践的。也就是说,即使你存储进大脑,你也没有什么机会使用他,不经过多次提取,你就无法把知识变成能力。

好比你虽然会背很多武功秘籍,但打架你还是外行..因为你没有练习过。

原因三 对现实无用

在现实生活中,你获取知识肯定是想形成能力来完成特定事情。
问题就来了,事件的万物都是非常复杂的,任何简单的事情想做好都需要你在该领域的各个层面精通,否则你就是业余。
拿炒菜举例子,大家都能炒一炒。但肯定都没专业厨师好。 因为厨师经历过系统+训练

而你掌握的零碎的知识对现实是没有用的。既然如此,你何必浪费时间在这些知识上呢。

DRF 学习笔记

DRF View

Model

from django.db import model

serializer.Serializer  比这个更好的是  serializer.ModelSerializer 

下面是可以继承的mixin

mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,

他们分别对应的前端请求是 比如说 axios.patch

post
get + id 
patch
delete
get + 参数

这是通用的

GenericViewSet 

这是是终极大boss

ModelViewSet

关于过滤

下面是重写 get_queryset 方式获取的过滤功能

def get_queryset(self):
    q = MyApartment.objects.all()

    price_min = self.request.query_params.get("price_min", 0) # 0 是默认值

    if price_min:
        queryset = q.filter(price__gt=int(price_min)) #django 语法
        return queryset

下面是使用filter 文件来过滤

class Roomfilters(django_filters.rest_framework.FilterSet):
'''
房间的过滤类
'''
price_min = django_filters.NumberFilter(name='price',lookup_expr='gte')
price_max = django_filters.NumberFilter(name='price',lookup_expr='lt')
district = django_filters.CharFilter(name='district',lookup_expr='icontains') #前面加i忽略大小写

class Meta:
    model = MyApartment
    fields = ['price_min','price_max','district']

搜索

filter_backends = (DjangoFilterBackend,filters.SearchFilter,filters.OrderingFilter)

search_fields = ('district','rooms')  # ^=@$ 分别代表 startwith /exact match/Full search/ regex

排序

filter_backends = (DjangoFilterBackend,filters.SearchFilter,filters.OrderingFilter)

ordering_fields = ('price')

记Django 的一个大坑,账户密码明明是对的,但是无法登录

记Django 的一个大坑,账户密码明明是对的,但是无法登录

在创建超级用户的时候

python manager.py createsuperuser 

你如果创建用户成功了,但是你的密码和用户名比较像,他是不会提醒你的!,但是你如果想登录,他总是说你密码错误,我在这里卡了2天,硬是找不到原因,最终我使用

python manger.py changepassword username

来修改密码但时候,他就说我新密码和用户名太像不行!吗的为什么不在创建时候提醒我!

安装xadmin for Django 2 的时候慢的处理方法

在尝试安装xadmin for Django2 的时候,pip install git+git@... 命令非常慢!不知道怎么办,翻墙太麻烦 后来通过国内的 gitee 中转解决了。。 注意必须用 https 来安装。。

pip install git+https://gitee.com/woooms/django-xadmin-2

还有在配置uwsgi 配置文件的时候老是忘记查看虚拟环境路径的命令

echo $VIRTUAL_ENV