Django笔记

通过pip安装Django

pip install  Django==1.9.1

注:pip的安装方法

下载pip包解压后在当前目录打开终端运行

python setup.py install

查看当前Django版本号

python   (进入python交互界面)

import Django

django.VERSION    或者

print (django.VERSION)    或者

print (django.get_version())    或者

django-admin--version    或者

python -c "import django;  print(django.get_version())"

运行control+Z可以退出python交互界面 



创建工程时遇到的问题


解决方案

创建工程

使用 django-admin.py 来创建 website 项目:

django-admin startproject HelloWorld

工程目录说明

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 目录输入以下命令

启动Django自带的开发服务器:

python manage.py runserver 0.0.0.0:8000

0.0.0.0让其它电脑可连接到开发服务器,8000为端口号。如果不说明,那么端口号默认为8000。

效果

在命令行中输入control+c可以关闭Webserver

在对源代码进行修改时不需要先将webserver关闭,只需要在修改后再刷新页面即可


创建app(app为website的一部分功能块)

python manage.py startapp music  (music为app的名字)

django-admin.py startapp music


修改settings.py文件中的Installed_Apps,添加‘music’,

注:在settings.py文件中还可修改数据库配置、所在时区以及字符编码Encode


Django视图和URL配置

在url.py中设置url到views.py文件中方法的映射

url(r'^music/index/$','music.views.index')

(注:参数一为一个正则表达式,参数二为处理方法,当URL的形式和正则表达式匹配时转向方法)

vim blog/views.py

from django.http import HttpResponse (注:django.http为模块名,HttpResponse为对象名)

def index(req):

    return HttpResponse('<h1>hello world</h1>')

url配置的几种方式

1、正则表达式和方法匹配

urlpatterns = patterns('',

url(r'^music/index/$','music.views.index'),

)

2、导入html页面

from music.views import index

urlpatterns=patterns('',

url(r'^music/index/$',index),

)

3、urlpatterns = patterns('music.views',

url(r'^music/index/$','index'),

)

还可以在正则表达式中做一些变化

将url中的一部分作为参数传递

url.py文件中:

url(r'^music/index/(?P<id>\d{2})/$','index')

也可以不给参数取名字

url(r'^music/index/(\d{2})/$','index')

views.py文件中:

from django.shortcuts import render_to_response

def index(req,id):

    return render_to_response('index.html',{'title':'my page','id':id})


index.html文件中:

<head>

    <title>{{title}}</title>

</head>

<body>

id:{{id}}

</body>


Django创建模板

在应用目录下创建一个templates目录(Django中使用模板文件的固定位置)

mkdir music/templates

将写好的index.html文件保存到templates目录下

在views.py文件中

from django.http import HttpResponse

from django.template import loader

from django.template import Context

‘’‘

def index(req):

t=loader.get_template('index.html')

#创建template对象将对应的文件导入进来,会自动到应用下templates目录下寻找文件

c=Context({})

#Context对象用来存放要向模板存入的数据(本例中没有数据,为空)

return HttpResponse(t.render(c))

#HttpResponse对象返回(模板对象调用它的渲染方法render将Context对象渲染)后的结果

’‘’

改进模板使用方式

from django.shortcuts import render_to_response  #render为递交的意思

def index(req):

return render_to_response('index.html',{})

#参数一为html页面模板文件,参数二为要传给html页面的数据


Django模板变量

如何在视图中把数据动态地传递到模板文件(html文件)中去

模板变量(由两个大括号组成,里边放入变量名)

<title>{{title}}</title>

<h1>hello {{user}}</h1>

def index(req):

    return render_to_response('index.html',{‘title':'my page','user':'tom'})

#参数一为模板文件,参数二为传递的数据(以字典的形式)

传递字典和列表

def index(req):

    user = {'name':'tom','age':23,'sex':'male'}

    book_list = ['python','java','php','web']    #列表,list

    return render_to_response('index.html',{‘title':'my page','user':user,'book_list':booklist})

<h1>hello {{user.name}}</h1>


<li>age:{{user.age}}</li>

<li>sex:{{user.sex}}</li>


<li>{{book_list.0}}</li>

<li>{{book_list.1}}</li>

<li>{{book_list.2}}</li>

<li>{{book_list.3}}</li>


传递对象

class Person(object):

    def _init_(self,name,age,sex):

        self.name=name

        self.age=age

        self.sex=sex

def index(req):

    user = Person('tom',23,'male')

    return render_to_response('index.html',{'title':'my page','user':user})

#现在传递的user为一个对象

HTML文件中的写法不变,同上

<h1>hello {{user.name}}</h1>

<li>age: {{user.age}}</li>

<li>sex: {{user.sex}}</li>


可以传递的数据类型有:基本数据类型、 字典、对象、列表

.引用的优先级关系:字典—>对象的属性—>对象的方法—>列表


可以通过键、属性名、索引获取分量或属性


传递对象时执行其中的方法

class Person(object):

    def _init_(self,name,age,sex):

        self.name=name

        self.age=age

        self.sex=sex

    def say(self):

        return "I am "+self.name

def index(req):

    user = Person('max',33,'male')

    return render_to_response('index.html',{'title':'my page','user':user})

html中的写法

<div>{{user.name}} says:"{{user.say}}"</div>


Django模板标签

<body>

{% if user %}

<li>name: {{user.name}}</li>

{% else %}

用户不存在

{% endif %}

{% for book in book_list %}

<li>{{book}}</li>

{% endfor %}

{% for k,v in user.items %}    #k获取user字典中的key,v获取user字典中的value

<li>{{k}}:{{v}}</li>

{% endfor %}

</body>

更多模板标签的使用参考Django手册



Django模板使用流程


几种使用模板的方式

运行python manage.py shell,然后输入以下代码:

from django.shortcuts import render_to_response

      render_to_response('index.html',{'uname':‘allen‘})

输出:

<django.http.HttpResponse at 0x383d210>

说明render_to_response最终返回的是一个HttpResponse对象


Django模型

Django对数据库的操作

前期准备

安装配置MySQL

启动mysql server

sudo mysqld_safe

连接数据库服务器

mysql -u root -p

#输入mysql账号密码

退出数据库

control+c 或者 exit 回车

由于MySqlDB官网只支持Python3.4,这里Python3.5使用第三方库PyMysql连接Mysql数据库

pip install pymysql #安装pymysql

python3 #进入python3.5

import pymysql #引出pymysql模块

control+Z #退出python3.5

退出mysql server

mysqladmin - root -p shutdown

#输入mysql账号密码


在Django中通过pymysql使用MySQL数据库


大体步骤

1、启动mysql server

2、连接mysql server

3、创建数据库

mysql> create database 数据库名 default charset=utf8; 

3、在settings.py 中配置


4、在settings.py中配置mysql

mysql的配置如下:

DATABASES = {'default': {'ENGINE':'django.db.backends.mysql','NAME':'mydatabase','USER':'mydatabaseuser','PASSWORD':'mypassword','HOST':'127.0.0.1','PORT':'3306',}}

mysql的端口号是3306

使用mysql的时候会报错:no moudle named "MySQLdb",这是因为我们没有安装这个包

sudo apt-getinstallpython-devpipinstallMySQL-python

注:MySqldb官网只支持Python3.4,Python3.5使用第三方库PyMysql连接Mysql数据库

5.创建数据模型

模型其实就是一个python类,使用java开发就是java类etc。模型的存放地点是我们的应用的models.py文件中。每个模型都要继承models.Model类

classCategory(models.Model):name=models.CharField(max_lenth=128,unique=True)def__unicode__(self):returnself.nameclassPage(models.Model):    category=models.ForeignKey(Category)    title=models.CharField(max_lenth=128)    url=models.URLField()    views=models.IntegerField(defautl=0)def__unicode__(self):returnself.title

第二个类中的foreignKey字段包含了category,说明category是外键。有个奇怪的地方,当我们设计数据库表的时候,隐含的表明我们必须设计一个与数据不相关的ID字段,通常设为自增长,作为我们的主键。可是这里却没有,别慌,django十分善意,已经自动给我们设计了一个自动增长的id字段。

4.数据库迁移

当我们修改了模型的字段,往往意味着数据库中的表字段也要改变,这时候就需要用到数据库迁移了。django1.7以上版本提供了一个数据库迁移的工具。

执行命令:

pythonmanage.pymakemigrations

pythonmanage.pymigrate

每当我们对模型进行了修改或者是添加新的模型,都需要通过 _python manage.py makemigrations_命令进行注册

但是光是注册还不能真正将修改应用到数据库中,需要_python manage.py migrate_命令在数据库中修改表字段或新建表。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,924评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,902评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,716评论 0 239
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,783评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,166评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,510评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,784评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,476评论 0 196
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,196评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,459评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,978评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,321评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,964评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,046评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,803评论 0 193
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,530评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,420评论 2 265

推荐阅读更多精彩内容