Python Django的URL介绍

欢迎访问个人博客

Abstract

Django 遵从 MVC 模型,并将其特色化为 MTV 模型。T是模板template,V是视图view。模型的核心是通过用户访问的 url 来指向处理的view函数,而view函数处理后返回相应的结果。
url是所有功能的入口,所以url的编写就变得非常重要。
另外Django的URL支持re正则表达式,可以提供丰富的URL解析地址


关于请求

这里简单说明下Django的请求原理

  • 用户发起request请求到Django服务
  • Django 服务通常会根据settings.py里面的配置ROOT_URLCONF来进行模块匹配。默认ROOT_URLCONF = 'myproject.urls'
  • Django 加载该 Python 模块并寻找可用的 urlpatterns 变量。该变量是一个 Python 列表,详见myproject/myproject/urls.py
  • Django 按照顺序的方式,正则匹配每一个URL模式,在第一个与请求的URL 匹配的地方停下来(下面也符合的会被忽视)。
  • 一旦匹配到,Django 将导入并调用给出的视图中涉及到的函数。

    视图将获得如下参数:

    • 一个HttpRequest 实例(这也是为什么 view 函数的第一个参数要是 request,该实例封装了所有的 http 请求报文的信息)

      • 如果正则匹配的 url 中使用了括号分组,但却没有为分组进行命名,则使用位置参数的模式为view函数传参。强烈建议使用关键字命名的分组
    • 如果是命名的分组,则使用关键字传参的方式。但是可以被django.conf.urls.url()的可选参数kwargs覆盖。

    • 如果没有匹配到正则表达式,或者如果过程中抛出一个异常,Django 将调用一个适当的错误处理视图。

    • 函数处理完毕,返回处理后的结果。

阅读更多

Django基础配置介绍

欢迎访问个人博客

Abstract

在上一篇Django环境搭建完毕,默认会在生成一个和项目同名称的文件夹,Django入口的配置都是在该目录下的settings.py

比如项目名称为 simpleblog,则配置文件为simpleblog、simpleblog/settings.py


配置介绍

Debug

DEBUG 配置默认为 True, 设置为TRUE会暴露出一些出错信息或者配置信息以方便调试。所以一般在开发测试阶段我们设置其为TRUE, 上线之后设置其为FALSE,防止配置信息或者敏感出错信息泄露。

ALLOWED_HOSTS

ALLOWED_HOSTS 是为了限定请求中的host值,以防止黑客构造包来发送请求。只有在列表中的host才能访问。

强烈建议不要使用*通配符去配置,另外当DEBUG设置为False的时候必须配置这个配置,否则会抛出异常。

配置模板如下:

1
2
3
4
5
ALLOWED_HOSTS = [
'.example.com', # Allow domain and subdomains
'.example.com.', # Also allow FQDN and subdomains
'139.198.xxx.xxx', # 测试环境我们一般允许自己的主机IP访问即可
]

Refer to https://docs.djangoproject.com/en/1.8/ref/settings/#allowed-hosts

INSTALLED_APPS

一般在项目中我们会通过python manage.py startapp appname 创建自己的APP,当然这个并不是必须的。如果创建了,则需要将其加入到 INSTALLED_APPS 数组中才可以被访问到。

配置模板如下:

1
2
3
4
5
6
7
8
9
10
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# config your app here
'appname',
]

数据库配置

Django 默认配置的sqlite数据库,如果只是我们测试用这个就够了,但是实际中我们大多项目都会选择使用MySQL等。

目前Django官网默认支持的数据库有

  • MySQL
  • PosgreSQL
  • Oracle
  • Sqlite

如果你的项目适合用MongoDB,你可以参考一下连接
https://staltz.com/djangoconfi-mongoengine/#/

阅读更多

Django blog - 结果展现

欢迎访问个人博客

Abstract

经过之前的几篇介绍和实战,最终的博客效果如下

另外该项目已经share到Github,希望对大家所有帮助,如果觉得不错,也希望大家star

github地址: https://github.com/opscolin/simpleblog


Show Time

首页

首页展示

阅读更多

Centos下Django环境搭建

欢迎访问个人博客

Abstract

继续Python Django 博客开发系列,这篇主要分享环境的搭建和基础配置


Before Installation

附自动化安装脚本部分截图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@i-pp837f3z ~]# source install_pyenv.sh
default install to ~/.pyenv
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.bit.edu.cn
* extras: mirror.bit.edu.cn
* updates: mirrors.btte.net
Package readline-6.2-9.el7.x86_64 already installed and latest version
Package 1:openssl-1.0.1e-60.el7_3.1.x86_64 already installed and latest version
Package bzip2-libs-1.0.6-13.el7.x86_64 already installed and latest version
... ...
... ...
Dependency Installed:
keyutils-libs-devel.x86_64 0:1.5.8-3.el7 krb5-devel.x86_64 0:1.14.1-27.el7_3 libcom_err-devel.x86_64 0:1.42.9-9.el7 libgnome-keyring.x86_64 0:3.8.0-3.el7 libkadm5.x86_64 0:1.14.1-27.el7_3
libselinux-devel.x86_64 0:2.5-6.el7 libsepol-devel.x86_64 0:2.5-6.el7 libverto-devel.x86_64 0:0.2.5-4.el7 ncurses-devel.x86_64 0:5.9-13.20130511.el7 pcre-devel.x86_64 0:8.32-15.el7_2.1
perl-Error.noarch 1:0.17020-2.el7 perl-Git.noarch 0:1.8.3.1-6.el7_2.1 perl-TermReadKey.x86_64 0:2.30-20.el7 rsync.x86_64 0:3.0.9-17.el7 zlib-devel.x86_64 0:1.2.7-17.el7
Complete!
Cloning into '/root/.pyenv'...
remote: Counting objects: 15365, done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 15365 (delta 50), reused 63 (delta 43), pack-reused 15291
Receiving objects: 100% (15365/15365), 2.74 MiB | 1.32 MiB/s, done.
Resolving deltas: 100% (10511/10511), done.
Cloning into '/root/.pyenv/plugins/pyenv-virtualenv'...
remote: Counting objects: 1901, done.
remote: Total 1901 (delta 0), reused 0 (delta 0), pack-reused 1901
Receiving objects: 100% (1901/1901), 537.87 KiB | 255.00 KiB/s, done.
Resolving deltas: 100% (1305/1305), done.

安装完成验证

1
2
[root@i-pp837f3z ~]# pyenv versions
* system (set by /root/.pyenv/version)

Install Django

这里安装超级快,因为我们切换了 pip 的 安装源

1
2
3
4
5
6
7
8
9
10
[root@i-pp837f3z ~]# pip install django==1.11.4
Collecting django==1.11.4
Downloading https://pypi.doubanio.com/packages/fc/fb/01e0084061c50f1160c2db5565ff1c3d8d76f2a76f67cd282835ee64e04a/Django-1.11.4-py2.py3-none-any.whl (6.9MB)
100% |████████████████████████████████| 7.0MB 6.4MB/s
Collecting pytz (from django==1.11.4)
Downloading https://pypi.doubanio.com/packages/55/62/e7cd0e15b76062d298413f14bb4ec3cd8568a22d274427f9c3c7286969f4/pytz-2017.2-py2.py3-none-any.whl (484kB)
100% |████████████████████████████████| 491kB 3.9MB/s
Installing collected packages: pytz, django
Successfully installed django-1.11.4 pytz-2017.2
[root@i-pp837f3z ~]#

Verify Installation

1
2
3
4
5
6
7
8
[root@i-pp837f3z ~]# python
Python 2.7.5 (default, Nov 6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.__version__
'1.11.4'
>>>

Django 项目初始

创建项目

进入到你的工程目录下面去,然后开始我们的Django之旅

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@i-pp837f3z opt]# cd /opt/djangoproject/
[root@i-pp837f3z djangoproject]# pwd
/opt/djangoproject
[root@i-pp837f3z djangoproject]# django-admin.py startproject myblog
[root@i-pp837f3z djangoproject]# tree myblog/
myblog/
|-- manage.py
`-- myblog
|-- __init__.py
|-- settings.py
|-- urls.py
`-- wsgi.py
1 directory, 5 files

django-admin.py VS manage.py

  • django-admin.py

    是Django项目的入口命令行管理工具集,通过他可以创建我们的项目、同步数据库、等等操作, 你可以 django-admin.py --help 查看全部用法

  • manage.py

    和django-admin.py有相同的用处,不过额外的还有别的和项目特殊相关的。在创建每个项目的时候都会自动生成一个 manage.py 文件,它会把你的项目自动加入到 sys.path中去等,具体可以参考:https://docs.djangoproject.com/en/1.11/ref/django-admin/

创建应用

阅读更多

python 切换pip 豆瓣源

欢迎访问个人博客

Abstract

python pip 安装的时候默认是去访问 https://pypi.python.org/pypi ,
这个访问起来你懂得,很慢的,经常会出现如下等超时问题, 国内比如阿里、豆瓣等配置了自己的pip源
在实际安装中我们可以切换到这些国内的源,会方便快速很多


默认安装报 timeout 错误

django-pip-install.png


新增配置豆瓣源

1
2
3
4
5
6
7
root@pts/0 # cat /root/.pip/pip.conf
[list]
format=columns
[global]
timeout = 60
index-url = https://pypi.doubanio.com/simple

阅读更多

初始Django

欢迎访问个人博客

摘要

Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.


根据官网的介绍我们知道:Django是一个开放源代码的Python Web框架,可以让我们快速的开发出实用的项目。它是在快节奏的新闻编辑室环境中开发的,它旨在使常见的Web开发任务变得快速而容易,而不需要重新发明轮子。主要的是它集成了后台,不需要自己再额外开发后台,专注业务逻辑的开发。


说明

作为Django的初始学习,这里拿开发一个简单的博客开始。

在项目中前端采用bootstrap框架,博客编写采用Markdown的方式,保存在MySQL数据库中,最终通过通过Python读取之后用misaka模块做Markdown到HTML的解析

关于Markdown转HTML模块的技术选型,对比了Python的一下模块,最终发现misaka是最快的

阅读更多

python Django 博客开发

欢迎访问个人博客

Abstract

该分支是在初次学习Django的过程中,利用开发单用户模式的博客系统为实战项目的知识点整理和分享,
希望大家能共同探讨进步


Django Blog

阅读更多

Django admin模块CSS样式丢失处理

Abstract

在利用 Nginx+uwsgi 部署Django项目之后,发现 admin 模块
的CSS样式、JS等文件访问全部404,丢失找不到原始资源,整理解决方法


错误

nginx 错误日志如下:

1
2
3
2017/08/08 11:50:21 [error] 2236#0: *82 open() "/project/django/simpleblog/static/admin/js/change_form.js" failed (2: No such file or directory), client: 106.37.207.126, server: 139.198.11.232, request: "GET /static/admin/js/change_form.js HTTP/1.1", host: "139.198.11.232:8080", referrer: "http://139.198.11.232:8080/admin/blog/blog/4/change/"
... ...
2017/08/08 11:51:27 [error] 2236#0: *89 open() "/project/django/simpleblog/static/admin/css/base.css" failed (2: No such file or directory), client: 106.37.207.126, server: 139.198.11.232, request: "GET /static/admin/css/base.css HTTP/1.1", host: "139.198.11.232:8080", referrer: "http://139.198.11.232:8080/admin/blog/blog/"

解析

在Django项目开发过程中, setting.py 中配置如下:

阅读更多

CentOS6 搭建Nginx+Subversion环境

欢迎访问个人博客

摘要

众所周知,Subversion是Apache的产物,当然Apache对SVN具有很好的支持
但是目前Nginx还木有对应的模块支持web访问SVN。但是目前项目中使用Nginx作为域名访问的入口
故有了这篇关于使用Nginx配置访问SVN。
其本质是利用Nginx反向代理到Apache http,最终还是用的httpddav模块


install Subversion

first init to install epel package

yum install epel-release

install subversion

yum install subversion -y

config svn

1
2
3
4
mkdir -p /project/svn/
cd /project/svn/
svnadmin create yybanana
chown -R apache:apache yybanana

start svn

svnserve -d -r /project/svn/yybanana

阅读更多

Centos下YUM安装PHP的两种方式

摘要

一般Centos下安装软件我们采用源码安装或者RPM包安装的方式,有时候更简单我们可以采用YUM源的方式

安装PHP的时候有个特殊的地方,其有两个YUM源可供选择


Webtatic方式安装升级PHP

安装webtatic
1
2
3
4
5
6
7
8
[root@i-bskmtj6q ~]# rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
Retrieving https://mirror.webtatic.com/yum/el6/latest.rpm
Preparing... ########################################### [100%]
1:webtatic-release ########################################### [100%]
[root@i-bskmtj6q ~]# ls -l /etc/yum.repos.d/webtatic*
-rw-r--r-- 1 root root 963 Nov 13 2016 /etc/yum.repos.d/webtatic-archive.repo
-rw-r--r-- 1 root root 865 Nov 13 2016 /etc/yum.repos.d/webtatic.repo
-rw-r--r-- 1 root root 963 Nov 13 2016 /etc/yum.repos.d/webtatic-testing.repo
安装或者升级PHP
1
2
3
4
## install
yum --enablerepo=remi install php php-*
## update
yum --enablerepo=remi update php php-*

阅读更多