ubuntu14.04+python2.7+django1.6安装以及简单教程

本篇只是入门简介,内容很简单,而且基本是借鉴RUNOOB的教程.不过因为版本不同有些命令不一样,而且过程中,遇到了点问题,加了写自己的想法.

一: 简介   二: 安装     三: django-admin命令  四: 创建一个新项目  五: 启动服务器

六: 创建模板   七: django模型,数据库的操作    八: Django表单    九: DjangoAdmin管理工具


一: 简介 

python下有许多不同的web架构.知呼上的大神们都众说纷纭的发表了意见和对比,如下

https://www.zhihu.com/question/20706333

不过不可否认Django是非常重量级常用的一种.python完成的开放源代码的web应用架构.

采用了MVC的软件设计模式,M模型,V视图,C控制器.这几个概念后面具体实现的时候会经常出现.


: 安装

我觉得这个安装起来还是满坑爹的.版本的对应很重要.

Django 版本对应的Python 版本:

Django 版本

Python 版本

1.8

2.7, 3.2 , 3.3, 3.4, 3.5

1.9, 1.10

2.7, 3.4, 3.5

1.11

2.7, 3.4, 3.5, 3.6

2.0

3.5+

我的平台是ubuntu14.04,python2.7 (当然我也安装了python3)

我为了省事直接:

sudo apt-get install python-django

这里注意下,apt-get 貌似库没有更新,默认安装的是django1.6.11版本的.版本不是很新.

~/HelloWorld$ python -c "import django; print(django.__path__);print(django.VERSION)"['/usr/lib/python2.7/dist-packages/django']
(1, 6,11, 'final', 0)
~/HelloWorld$django-admin --version
1.6.11
>>>import django
>>>django.get_version()
'1.6.11'

https://www.digitalocean.com/community/tutorials/how-to-install-the-django-web-framework-on-ubuntu-14-04

各种方式安装:

get-apt:

sudo apt-get update
sudo apt-get install python-django

方便,但是落后于官方最新版本,看到有老外抱怨

pip:

sudo apt-get install python-pip
sudo pip install django

virtualenv:

sudoapt-get install python-pip
sudopip install virtualenv
mkdir~/newproject
cd~/newproject
virtualenvnewenv
sourcenewenv/bin/active
sudopip install django

git: 

sudo apt-get install python-pip
gitclone git://github.com/django/django ~/django-dev
sudopip install -e ~/django-dev

: django-admin命令

安装完成之后就了可以用django-admin.py来管理了.

$:/usr/local/bin$cat django-admin.py
#!/usr/bin/python
from django.coreimport management
if __name__ =="__main__":
management.execute_from_command_line()

$:~/HelloWorld$django-admin.py
Usage:django-admin.py subcommand [options] [args]
Options:
-v VERBOSITY,--verbosity=VERBOSITY
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings=SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be
used.
--pythonpath=PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Raise on exception
--version show program's version number and exit
-h, --help show this help message and exit
Type'django-admin.py help ' for help on a specificsubcommand.
Availablesubcommands:
[django]
check
cleanup
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
runfcgi
runserver
shell
sql
sqlall
sqlclear
sqlcustom
sqldropindexes
sqlflush
sqlindexes
sqlinitialdata
sqlsequencereset
startapp
startproject
syncdb
test
testserver
validate

: 创建一个新的项目

~$django-admin.py startproject HelloWorld
~/HelloWorld$tree
.
|-- HelloWorld
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- manage.py

HelloWorld:项目的容器。

  • manage.py:一个实用的命令行工具,可让你以各种方式与该Django项目进行交互。

  • HelloWorld/__init__.py:一个空文件,告诉Python该目录是一个Python包。

  • HelloWorld/settings.py:Django项目的设置/配置。

  • HelloWorld/urls.py:Django项目的URL声明;一份由Django驱动的网站"目录"

  • HelloWorld/wsgi.py:一个WSGI兼容的Web服务器的入口,以便运行你的项目。

五: 启动服务器

~/HelloWorld$ python manage.py runserver 10.169.22.41:8000
#让其它电脑可连接到开发服务器,8000 为端口号。如果不说明,那么端口号默认为 8000
Validating models...
0 errors found
May 30, 2018 - 10:32:32
Django version 1.6.11, using settings 'HelloWorld.settings'
Starting development server at http://10.169.22.41:8000/
Quit the server with CONTROL-C.
[30/May/2018 10:32:36] "GET / HTTP/1.1" 400 26
Validating models...
##这里页面出现Bad Request (400)的报错
#做了如下的更改就可以了.
0 errors found
May 30, 2018 - 10:35:30
Django version 1.6.11, using settings 'HelloWorld.settings'
Starting development server at http://10.169.22.41:8000/
Quit the server with CONTROL-C.
[30/May/2018 10:35:37] "GET / HTTP/1.1" 200 1757
项目启动之后会一直检测 ,程序不会自动退出.项目中如果代码有改动,服务器会自动监测代码的改动并自动重新载入,所以如果你已经启动了服务器则不需手动重启。


改动1:

启动django后,不能访问,报400错误。

原因:没有开启允许访问

处理:编辑HelloWorld目录下settings.py,把其中的

ALLOWED_HOSTS=[]改成ALLOWED_HOSTS=['*']##* 表示任意地址。

ubuntu14.04+python2.7+django1.6安装以及简单教程_第1张图片

改动2:

新建视图文件:

~/HelloWorld/HelloWorld$cat view.py
from django.httpimport HttpResponse
def hello(request):
returnHttpResponse("Hello World!")
绑定视图文件 url与视图函数:
~/HelloWorld/HelloWorld$cat urls.py
fromdjango.conf.urls import patterns, include, url
from . import view
urlpatterns = [
url(r'^$',view.hello),
]
ubuntu14.04+python2.7+django1.6安装以及简单教程_第2张图片

改动3:

url(r'^$',view.hello),

>>>>

url(r'^hello$',view.hello)

>>>

则打开http://10.169.22.41:8000/ 汇报错, http://10.169.22.41:8000/hello 则可以正常显示.

ubuntu14.04+python2.7+django1.6安装以及简单教程_第3张图片


六:  创建模板

使用模板也就是一个html之类的文本文件来输出数据,而不是像上面的例子中把数据和视图放在了一起.从而实现数据与视图分离。

1: HelloWorld 目录底下创建templates 目录并建立hello.html文件.

{{ hi}}

2:settings.py里面说明模板文件的路径,我是直接添加如下内容

TEMPLATE_DIRS = (
'/home/juliet/HelloWorld/templates',
)

3:修改view.py文件,添加一个新的对象,用来向模板提交数据.

context 字典中元素的键值"hi" 对应了模板中的变量"{{hi}}"

from django.shortcuts import render
def hello1(request):
    context = {}
    context['hi'] = 'Hello Juliet!'
    return render(request, 'hello.html', context)
ubuntu14.04+python2.7+django1.6安装以及简单教程_第4张图片

我看有些版本是添加如下:

"""
TEMPLATE = [
{
'BACKEND':'django.template.backends.django.DjangoTemplates',
# 'DIRS':[BASE_DIR+"/templates",],
# 也有可能是 'DIRS': [os.path.join(BASE_DIR,'HelloWorld/templates')],
'DIRS':['/home/juliet/HelloWorld/templates',],
'APP_DIRS':True,
'OPTIONS':{
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
"""

没有用,可能是因为版本的问题,识别不了.改成如下就可以了

https://stackoverflow.com/questions/1926049/django-templatedoesnotexist

TEMPLATE_DIRS = (
'/home/juliet/HelloWorld/templates',
)

就可以了,http://10.169.22.41:8000/hello显示hello juliet

模板的继承:

模板可以用继承的方式来实现复用。

1: 接下来我们先创建之前项目的templates 目录中添加base.html 文件





titleof web(ooop.com)


helloworld!

mydjango test

{% blockmainbody %} #名为mainbody 的block 标签是可以被继承者们替换掉的部分。

original

{% endblock%} #标签告诉模板引擎,子模板可以重载这些部分。

2: 修改hello.html文件

{% extends"base.html" %} #hello.html继承了base.html文件.
{% block mainbody%}

come from base.html

#这里用来替换base.html中block部分 {% endblock %}

ubuntu14.04+python2.7+django1.6安装以及简单教程_第5张图片

: django模型,数据库的操作

Django对各种数据库提供了很好的支持,包括Mysql,SQLite, Oracle,为这些数据库提供统一调用的API.工作中应用的是Mysql.

1:settings.py里面设置DATABASES数据库信息

DATABASES = {
'default':{
'ENGINE':'django.db.backends.mysql',
'NAME': 'database1', #对应你的database的名字,已存在的
'USER': 'root', #数据库用户名
'PASSWORD': '123', #密码
'HOST': 'localhost', #数据库server
'PORT': '3306' #接口默认
}
}

2: 定义模型,创建APP

Django规定要使用模型就必须创建一个app,所以如下我们准备创建一个TestModelapp.

~/HelloWorld$django-admin.py startapp TestModel
|--TestModel
| |-- __init__.py
| |-- admin.py
| |-- models.py
| |-- tests.py
| `-- views.py

自动生成了如上的一些文件.

3:修改app里面的models.py文件

from django.db import models
# Create your modelshere.
classTest(models.Model):
name =models.CharField(max_length=20)
#其中Test代表将会在页面上显示的数据表名,继承了models.Model

4:settings.py文件里面添加新建的APP

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel', #新添加
)

5: 运行创建表结构

python manage.py syncdb

这里有几个方面需要注意:

(1)有些地方用的是如下命令创建表结构(1.7以后的版本)

python manage.py migrate
python manage.py makemigrations TestModel
python manage.py migrate TestModel

但是我当前的Django(1.7以前的版本)不是用这个命令的:

~/HelloWorld$python manage.py migrate
Unknown command:'migrate'
Type 'manage.pyhelp' for usage.

https://stackoverflow.com/questions/12843550/manage-py-unknown-command-migrate

(2)确保此时你的mysql服务是开启的状态.

~/HelloWorld$python manage.py syncdb
File"/usr/lib/python2.7/dist-packages/MySQLdb/connections.py",line 187, in __init__
super(Connection, self).__init__(*args, **kwargs2)
django.db.utils.OperationalError:(2002, "Can't connect to local MySQL server through socket'/var/run/mysqld/mysqld.sock' (2)")
#这个报错查找了一圈发现是因为我的mysql没有启动...
sudo/etc/init.d/mysql start
mysql -u root -p 123
~/HelloWorld$python manage.py syncdb
Creating tables ...
Creating tabledjango_admin_log
Creating tableauth_permission
Creating tableauth_group_permissions
Creating tableauth_group
Creating tableauth_user_groups
Creating tableauth_user_user_permissions
Creating tableauth_user
Creating tabledjango_content_type
Creating tabledjango_session
Creatingtable TestModel_test
You just installed Django's auth system, which means you don't have any superusersdefined.
Would you like tocreate one now? (yes/no): yes
Username (leaveblank to use 'juliet'):
Email address:
Password: 123
Password (again):123
Superuser createdsuccessfully.
Installing customSQL ...
Installing indexes...
Installed 0object(s) from 0 fixture

syncdb-vs-migration

http://ruddra.com/2015/09/17/syncdb-vs-migration/

此时在你规定的数据库database1里面就可以看到新建的table TestModel_test了.


6: 数据库操作

添加数据

(1)在HelloWorld 目录中添加testdb.py 文件,其实是对数据库的操作,创建对象,save添加的操作.

相当于对Mysql执行了INSERT.

from django.httpimport HttpResponse
from TestModel.models import Test
def testdb(request):
test1 =Test(name='runoob')
test1.save()
return HttpResponse("

data added ok

")

此时你登录数据库查看,就可以看到新添加的信息了.

mysql> select *from TestModel_test;
+----+--------+
| id | name |
+----+--------+
| 1 | runoob |
+----+--------+
1 row in set (0.00sec)#说明数据添加成功了

(2) 修改urls.py

from . import view,testdb
urlpatterns = [
url(r'^hi$',view.hello1),
url(r'^testdb$', testdb.testdb),
]

打开页面效果:

ubuntu14.04+python2.7+django1.6安装以及简单教程_第6张图片

下面有更多的数据库相关操作:获取数据;更新数据;删除数据;

都是在testdb.py脚本中Test.objects这个模型管理器进行操作的.


八: Django表单

HTML表单是网站交互性的经典方式.Django对用户提交的表单数据进行处理.

HTTP协议是以”请求-回复”的方式工作的.客户发送请求时,可以在请求中附加数据.服务器通过解析请求,就可以获得客户传来的数据,并根据URL来提供特定的服务.


GET方法:

视图显示和请求处理分成两个函数处理.search_form.htmlsearch.py

1:新建search.py文件,用于接收用户请求

from django.httpimport HttpResponse
from django.shortcuts import render_to_response
#表单
def search_form(request):
     return render_to_response('search_form.html')#接收请求数据,并响应
defsearch(request):
     request.encoding='utf-8'
     if 'q' inrequest.GET:
         message = 'what you are searching is: '+ request.GET['q']
     else:
         message = 'your ticket is empty'
         return HttpResponse(message)

2: 在模板目录templates 中添加search_form.html 表单





runoobtest







3: 修改urls.py文件

from django.conf.urls
import url from .import view,testdb,search
urlpatterns = [
url(r'^hi$',view.hello),
url(r'^testdb$',testdb.testdb),
url(r'^search-form$',search.search_form),
url(r'^search$',search.search),
]

访问地址http://127.0.0.1:8000/search-form 并搜索


ubuntu14.04+python2.7+django1.6安装以及简单教程_第7张图片



有时候会遇到类似下面的错误.可能就是自己在url.py里面忘记了import对应的脚本

Django Version:

1.6.11

Exception Type:

NameError

Exception Value:

name 'search' is not defined

POST方法:

提交数据更常用的是POST方法.下面使用该方法,并用一个url和处理函数.同时显示视图和处理请求.

1:tempaltes里面创建post.html文件





runoobpost test


    
        {%csrf_token %} #csrf 全称是Cross Site RequestForgery。这是Django提供的防止伪装提交请求的功能。POST方法提交的表格,必须有此标签。                    
   

{{rlt }}

#我们增加一个rlt 记号,为表格处理结果预留位置。

2: 创建search_post.py并使用search_post 函数来处理POST 请求

from django.shortcuts import render
from django.views.decorators import csrf
def search_post(request):
     ctx={}
     if request.POST:
         ctx['rlt']=request.POST['q']
     return render(request, "post.html", ctx)

3: 修改urls.py文件

from django.conf.urls import url
from . import view,testdb,search,search2
urlpatterns = [
     url(r'^hello$',view.hello),
     url(r'^testdb$',testdb.testdb),
     url(r'^search-form$',search.search_form),
     url(r'^search$',search.search),
     url(r'^search-post$',search2.search_post), ]

ubuntu14.04+python2.7+django1.6安装以及简单教程_第8张图片


九: DjangoAdmin管理工具

Django提供了基于web的管理工具.django.contrib是一个庞大的功能集,django的自动化管理工具是django.contrib的一部分,settins.pyinstalled_apps里面可以看到.


1: 修改urls.py,激活管理工具.

from django.contrib import admin
urlpatterns = [url(r'^admin/', admin.site.urls), ]

打开http://10.169.22.41:8000/admin/登录界面,需要用户名密码.

ubuntu14.04+python2.7+django1.6安装以及简单教程_第9张图片

superuser这个貌似在前面生成app的时候创建过了,直接登录

如果之前没有创建,可以通

python manage.py createsuperuser #来创建

2: admin来管理数据模型.

为了让admin 界面管理某个数据模型,我们需要先注册该数据模型到admin。比如,我们之前在TestModel 中已经创建了模型Test 。修改TestModel/admin.py:

from django.contrib import admin
from TestModel.models import Test
# Register your models here.
admin.site.register(Test)

ubuntu14.04+python2.7+django1.6安装以及简单教程_第10张图片

点击进去的话,是之前在database1里面TestModel_test里面添加的数据.

你可能感兴趣的:(ubuntu相关应用)