Vue 解决跨域问题!

跨域是一个超级麻烦的事情!

第一种情况

The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' 

看到提示有这样的,说明你的reseponse 里面 Access-Control-Allow-Origin 必须是一个确定的网址,而不是直接写一个 * ,

第二种情况,干脆说你没有 Access-Control-Allow-Origin ,这时候需要 flask 手动返回

@app.after_request
def after_request(response):
  # response.headers.add('Access-Control-Allow-Origin', 'http://localhost:8080')
  response.headers.add('Access-Control-Allow-Credentials', 'true')
  response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization,X-Requested-With')
  response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
  return response

‘list’ object has no attribute ‘rsplit’ admin

当我尝试登录 xadmin的时候报错,而这个错误昨天还没有,我猜和缓存有点关系

‘list’ object has no attribute ‘rsplit’

well, 实际上我自己通过在源码打断点的方式找到了错误原因。。

不知道我为什么在这里加了一个数组。。。我太2了!,下次应该早点从报错的根源哪里打断点开始分析,免得浪费时间
AUTHENTICATION_BACKENDS = (
‘users.views.CustomBackend’,
[‘django.contrib.auth.backends.ModelBackend’] #这是默认的设置
)

Vue-router 入门文章合集

Vue Router 入门总结

在这篇文章里面,作者介绍了路由的两个核心组件

router-link和router-view是两个功能性内置组件。

  • router-link默认被渲染为a标签,负责路由跳转功能;
  • router-view是组件内容被渲染的位置。

动态路由,其实就是路由的时候传参数,发get请求

一个路由渲染多个组件

<router-view class="view one"></router-view>
<router-view class="view two" name="sidebar"></router-view>
<router-view class="view three" name="header"></router-view>

一个视图使用一个组件渲染,因此对于同个路由,多个视图就需要多个组件。确保正确使用 components 配置(带上 s):

routes: [
    {
      path: '/',
      components: {
        default: Foo,
        a: SideBar,
        b: Header
      }
    }
  ]

结合Vuex 和 vue router

虽然我还不知道是什么,但看起来很6..

还有一个入门文章解释的很详细

这一条很有意思

请参考官方文档:
不过这种模式要玩好,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,这就不好看了。
所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个index.html 页面,这个页面就是你 app 依赖的页面

我们每天的生活有多少是在浪费时间?

我们每天关注的事情,谈论的内容,付出时间完成的小事,有多少是在浪费时间的? 下面我列出5宗罪

对外界环境敏感是生物本能,但天天关注新闻是另外一回事!新闻只是浅层的食物发展播报,研究一条条的新闻没有任何意义。 当然如果你你能从宏观的角度使用点大数据技术,研究新闻还是有点意义的。但对普通人来说,你看新闻其实都是在浪费时间

关注大公司的动态,比如腾讯,阿里

实际上是,他们这样的巨头已经是一个帝国,现在提到这两个名字没有任何指代意义。任何基于这两个名字出来的结论都没有任何实际意义。
当然我说当然 你对自己行业的新闻还是要关注的。。但这就属于工作范畴了。

关注知名企业家动态,比如雷军,马斯克,小渣

他们很牛,但是你要知道,他们公开的知识对你没有帮助,因为任何车站成功学的书籍打开一看和他们说的也差不多。 真正让他们很牛的东西,他们不愿意也无法公开的说,关键是说了也不适用于你。

任何公开的信息都不足以让你形成竞争力。我相信你理解这一点。

当然你关注他们只是为了娱乐一下,从小渣百年不走样的灰短袖找找人人平等的心灵鸡汤,也无可厚非。娱乐吗..就是消磨时间~不符合我们的标题。

关注比特币和区块链新闻

老实说,我自己对区块链有研究兴趣,但过分关注区块链就是一种心理疾病,如果一种技术新趋势出现来,你感兴趣,那么你可以深入研究。但是对发生新闻过分关注就是焦虑症发作..

你关注比特币无非以下原因:

  • 你有买入,想看看市值,或者市场利好,但投资大忌就是频频做动作。
  • 你想买入,观望时机。但比特币这种东西,你如果信,那随时都是买入时机,你如果不信,再低买入都是傻。
  • 你想看它暴跌来弥补你错过它暴涨带来的心理不平衡。你脑袋秀逗了~

无论是那一种情况都不值得你关注他们的新闻…

刷过多朋友圈

如果你能从亲朋好友但朋友圈获取到一些正能量和回忆之类的,作为人类的你还是需要的… 但现在朋友圈要么是幼稚的娱乐播报,要么是带有炫耀性质的生活独白~或者干脆是募捐拼团的广告连接~,如此说来,朋友圈你关注几个行业大佬来获取重要行业信息,然后关注很少的几个闺蜜好友,带上父母子女就够了。其他的信息基本对你没有任何意义.. 而且你刷朋友圈的次数一天一分钟就好了。

手速慢,脑速快

目前人类的财富最终都是通过双手带来的,当然是在手脑协同的情况下。但对人类来说,往往脑速超过手速。 结果就是我们每天花大量时间来思考,各种新想法,层出不穷。但落实到双手上的,几乎没有.. 没有落实的想法就是毫无意义的。要成为doer not thinker!

吸收太多,产出太少

和上面一条类似,我们的大脑,通过眼睛和耳朵,每天吸收的信息实在是太多,但通过双手和嘴巴产出的是在太少。结果就是,我们其实最终吸收的知识其实并不多,最终形成的能力更是寥寥无几。

注意我所说的知识信息能力是有巨大区别。 一个人知道一件事,是信息,一个能解释和关联一件事,是知识。一个人能利用这个信息创造新的财富叫能力。 那么问你下自己,你究竟能把多少信息转化为能力?

所以你需要重新分配下你的时间,多动手,多实操,多写,少看,少听。

动手总是比较累,动眼睛和动耳朵总是比较轻松,但伟大的能力都来自于敲键盘和烂笔头~~~

学习Vuex 需要看的文章

一直很难入门VUEX,直到看到这篇文章,我才豁然开朗!作者把VUEX类比数据库的过程非常易于理解

Vuex,从入门到入门

Vuex 主要把所有状态都放在一起,使用store 管理,store.state 就是项目中共享的数据。

mutations 就是存数据, 但是实际情况是,数据需要经过处理后才存入,所有中间多了一层 actions 专门来处理数据,mapActions 用来接收界面上发生的动作。

所以你在组件上只看到 mapGetters 和 mapActions ,而 mutation 只是中间件

<script>
 import {mapGetters,mapActions} from 'vuex'
   export default {
     computed: mapGetters([
       'count',
       'getOdd'
     ]),
     methods: mapActions([
       'increment',
       'decrement',
       'clickOdd',
       'clickAsync'
      ])
   }
 </script>

至此VUEX的原理就算是完全理解了,接下来就是要靠练下了。。

Django 部署笔记—— Nginx + Github + Uwsgi + Supervisor

部署Django不是一个简单的事情,我遇到相当多的麻烦

第一步,部署前的准备

来到Django项目的根目录,别忘记Django 部署之前是需要收集静态文件的,收集静态文件有很多坑。STATIC_ROOTSTATIC_URL是必须指定的

STATIC_ROOT = os.path.join(BASE_DIR, 'static') #上面的意思是把路径里面带static的文件都放在static这个静态文件夹里面.. 

STATIC_URL = '/static/' 

 STATICFILES_DIRS = [ # os.path.join(BASE_DIR, "others"),] 
 # 要注意的是!如果上面的STATIC_ROOT 已经指定的任何路径,在这里都不要再指定,这里是给你加其他静态文件的,比如url特征是别的单词

在github或者gitee 上新建一个项目,拿到项目仓库地址,https://gitee.com/projectname/master

来到你的项目根目录 git init初始化你的项目; 然后 git remote add name https://gitee.com/projectname/master 把你的项目和远程仓库绑定 然后 git add -A把文件加到暂存区,git commit -m '第一次提交' 最后,提交代码 git push name master

** 注意有时,你无法提交,因为仓库里面默认有一个文件,你先 git pull name master一下,再push!

在你的服务器安装新的虚拟环境,mkvirtualenv name 安装你需要的任何包,千万不要忘记几个重要的包,虽然项目没说需要,但是没有却报错, dev-python3 这个!

pip install uwsgi 后,你先用 uwsgi 命令测试下能不能跑起来,后面的参数意思分别是 虚拟环境目录,wsgi.py 文件路径,还有一个权限配置。

uwsgi --home /root/.virtualenvs/djshop --file MxShop/wsgi.py --chmod-socket=666 

如果你上一步没问题,说明你代码没问题,

然后你就需要写 uwsgi.ini 这个配置文件了,我给你一个样本,写好了放项目根目录

chdir     =  /path/to/project/ #项目的根目录,绝对路径
wsgi-file = Name/wsgi.py # django 下面 wsgi 路径
processes = 1  # number of cores on machine
max-requests = 5000
chmod-socket = 666
master = True
vacuum = True
socket = /srv/xxx/name.sock # 和nginx 通信的脚本位置,你在这里写的什么路径,等下在nginx 配置文件要写一样的
daemonize = /srv/xxx/log/uwsgi.log # 日志的位置

然后 uwsgi –ini uwsgi.ini 来测试下配置文件,一般没问题。

写Nginx 配置:

cd /ect/nginx/conf.d/ 下面新建一个 name.conf 文件,作为你新网站的配置文件。 最好每个网站给一个配置文件。

server {
# 监听的端口号
    listen 80;
    # 域名或者本机的ip地址
    server_name www.domain.com ;
    charset     utf-8;
    # 最大的上传大小
    client_max_body_size 75M;
    # adjust to taste

    # 访问根目录下的任何url的配置
    location / {
    # 指定访问哪个upstream
    uwsgi_pass xxx;
    # 包括uwsgi参数的文件
    include     /etc/nginx/uwsgi_params;
}
    location /static {
    alias /srv/xxx/static;
}

}

基本这样就好,nginx 和 uwsgi 就连起来来,nginx 是入口,静态文件自己处理了,其他文件就分给wusgi 处理

当然你需要使用 supervisor 来管理你的uwsgi 进程也可以,我就不细说了。