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笔记_第1张图片
创建工程时遇到的问题


Django笔记_第2张图片
解决方案

创建工程

使用 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。

Django笔记_第3张图片
效果

在命令行中输入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('

hello world

')

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\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文件中:

    {{title}}

id:{{id}}


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}}

hello {{user}}

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})

hello {{user.name}}


  • age:{{user.age}}
  • sex:{{user.sex}}

  • {{book_list.0}}
  • {{book_list.1}}
  • {{book_list.2}}
  • {{book_list.3}}

  • 传递对象

    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文件中的写法不变,同上

    hello {{user.name}}

  • age: {{user.age}}
  • sex: {{user.sex}}

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

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


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


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

    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中的写法

    {{user.name}} says:"{{user.say}}"


    Django模板标签

    {% if user %}

  • name: {{user.name}}
  • {% else %}

    用户不存在

    {% endif %}

    {% for book in book_list %}

  • {{book}}
  • {% endfor %}

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

  • {{k}}:{{v}}
  • {% endfor %}

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



    Django模板使用流程


    Django笔记_第4张图片
    几种使用模板的方式

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

    from django.shortcuts import render_to_response

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

    输出:

    说明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_命令在数据库中修改表字段或新建表。

    你可能感兴趣的:(Django笔记)