【框架】Django入门学习笔记

教程 Demo 教材2 教材3

【转】

Django处理请求的工作机制

记住:

1.用manage.py runserver 启动Django服务器时就载入了在同一目录下的settings.py。该文件包含了项目中的配置信息,如前面将的URLConf等,其中最重要的配置就是ROOT_URLCONF,它告诉Django哪个Python模块应该用作本站的URLConf,默认的是urls.py

2.当访问url的时候,Django会根据ROOT_URLCONF的设置来装载URLConf。

3.然后按顺序逐个匹配URLConf里的URLpatterns。如果找到则会调用相关联的视图函数,并把HttpRequest对象作为第一个参数(通常是request)

4.最后该view函数负责返回一个HttpResponse对象

**我自己是这么记的:django的urlconf机制(就是urls脚本),根据你浏览器输入的网址,对应找到匹配的视图。models中的视图函数返回一个HttpResponse,调用模板,返回到浏览器,显示信息。//模板又是有关联到视图函数的。

【/转】

【转】

Django的标准库存放在 django.contrib 包中。每个子包都是一个独立的附加功能包。 这些子包一般是互相独立的,不过有些django.contrib子包需要依赖其他子包。

【/转】

================================================================

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C

  • Django开发的基本套路

l 创建项目与应用

django-admin.py startproject *

python manage.py startapp *

l 设计Model(数据库)  

编辑models.py

同步数据库 python manage.py syncdb

l 创建视图

l 创建模板

Html文件

添加模板路径

l 设置URL

url(r'^disk/', 'disk.views.register')

l 启动服务 

python manage.py runserver

=====================================================

  • 创建项目

$ django-admin.py startproject mysite
*目录结构变为:
mysite/ ---------------------------- 你创建的项目名,自定义名字。该目录下存放你的Django项目。
    manage.py ---------------------- Django项目里面的工具,通过它可以调用django shell和数据库等。
    mysite/ ------------------------ //
        __init__.py ---------------- //
        settings.py ---------------- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
        urls.py -------------------- 负责把URL模式映射到应用程序。
        wsgi.py -------------------- //
  • 设置数据库(Django默认的是使用Python的Sqlite)

$ python manage.py migrate //migrate命令根据mysite/mysite/setting.py 中的INSTALLED_APPS去创建数据表

*执行后会看到,有四张表生成。

$ python manage.py runserver //运行你的项目

*执行后,可以在浏览器中访问Django分配的这个地址

问:如何更改端口?(默认8000端口被占用的时候,也是要进行更改的)

$ python manage.py runserver 8080
$ python manage.py runserver 0.0.0.0:8000

*Django有个好处,就是你更改了代码,不用再重新断开运行,runserver会自动更新代码,更新功能到前端的。

$ python manage.py startapp polls //创建自己的应用

*创建应用的模型脚本(修改models文件) -> 生成数据表

*models文件内,定义你的模型(类),每个类有自己的变量,每个变量都设置好数据类型和数据长度(用于数据表中的,每个变量在数据表中就相当于列,表中的数据名)

*CharField/DateTimeField/IntegerField 都属于Field,它是一个抽象类,用于脚本和数据表(列)对应的(这也是为什么模型-数据表一一对应)

*有些Field有固定的参数,比如CharField有max_length

*ForeignKey(**其他相关的类名) //多对一的关系,看下下面的demo你就应该明白了 //关联了模型之间的关系(对应的表的关系也关联起来了,想想数据库的外键,应该思路就比较清晰了)

from django.db import models

class Car(models.Model):
    manufacturer = models.ForeignKey('Manufacturer')
    # ...

class Manufacturer(models.Model):
    # ...
    pass

*Django支持的数据库关系有:多对一,多对多,一对一

*通过这个模型,Django可以为我们完成:1.创建其对应的数据表 2.创建Python的数据库使用接口去调用我们设置好的模型对象

- 在setting中增加我们的应用,然后创建数据表 //然后再同步数据库!!//一旦修改了模型,就是修改了数据库中的表,也就是说要重新同步数据库,重启django服务

$ python manage.py makemigrations polls //makemigration把需要创建数据表的应用存气力啊(后面再通过migrate做到数据库的同步)

*你可以查看polls/migrations/0001_initial.py,去了解你设置好的数据表结构等 //也可以通过$ python manage.py sqlmigrate polls 0001查看(不推荐)

*数据库里表名(总的)默认是你的应用名

让我们来了解一下Django提供的API

  • Question.objects.all() //显示该类的所有实例参数值,数据库里存储的 //最好在该类中实现下__str__()方法(2x版本的用__unicode__()方法),这个方法有点类似Java的toString()

  • Question.objects.filter(id=1) 、Question.objects.filter(question_text__startswith='What') //这个方法,定位到需要的数据。

  • Question.objects.get(id=1) /(pk=1)

  • q.choice_set.all() //q是Question的一个实例,Question和Choice已经关联了,所以可以利用实例互相调用查看

  • q.choice_set.create(choice_text='The sky', votes=0) //设置变量值

  • c = q.choice_set.create(choice_text='Just hacking again', votes=0) -> c.question(查看)/先filter选中赋值给c,再c.delete(删除这条数据)

  • q.choice_set.count() //计算数据库中有多少条数据

创建一个管理员

 

现在就可以用这个账号登陆管理后台了。

*现在管理后台看不到我们的APP?我们让他们关联起来,让我们的APP可以调用admin的接口。修改polls(APP名)/admin.py文件 //也可以在第一次同步数据库时设置admin账号

#polls/admin.py

from django.contrib import admin
from polls.models import Question
admin.site.register(Question)

*如果脚本中的任何参数名更改(影响数据库中表的列名的!),要先makemigrations再migrate一下

现在你就可以在站点看到管理后台了

*这里的前端样式,都是django根据你的模型对应显示出来的

*每个文本框,控制器都是根据数据表内设置的值对应显示的

自定义管理后台的前端显示

 目标:在Question修改界面,把Question text和时间日期分隔开

在polls(APP名)/admin.py (这个文件也相当于models.py,不同在于一个是前台,一个是后台)

*首先把Question修改界面设置成QuestionAdmin界面(模型),分别两个参数(Question text和时间日期),再分别去关联question_text,pub_date

关联对象

我们的APP是:调查问卷(Question - Choice 对应) 

目标:每添加一个问题,我们就一起添加该问题的选项

*首先我们已经知道添加问题的界面是QuestionAdmin模型,那么我们就是要把Choice新增框也放在这个页面(页面设计的思路)

*再次打开admin.py文件,添加Choice新增功能模型,再把这个模型和QuestionAdmin模型关联起来(脚本编写的思路)

自定义管理后台页面的列项

目标:修改管理后台页面的列项(让它显示的信息更详细)

*同样的也是到admin.py文件修改,修改的是QuestionAdmin模型

*list_filter = [A,B] //这个django提供的右边筛选框的,[]内可以很多,不过每一项都是要嘛是有可选项(表内列名,数据类型有BooleanFieldCharFieldDateFieldDateTimeFieldIntegerField),要嘛继承与admin.SimpleListFilter的 //参考

*search_fields = [A,B] //搜索框,A,B限制跟楼上一样

目标:美化管理后台(使用grappelli) //参考//没搞懂//推荐用Xadmin

 

 

优化管理后台的界面 提升用户体验 - 自定义项目(APP)的模板(template)

优化界面 - 优化前端 - 模板就相当于我们的前端文件(template+view+url) - 设计编写自己的模板(template)

*在项目APP目录下添加templates文件夹,在setting中添加templates路径 

*添加template/admin/目录结构,添加html文件(django提供的django/contrib/admin/templates,可从里面找出来修改

*{%xxx%}是模板标签;{{eee}}是模板变量,{{eee|jjj:...}}是过滤器形式

自己做前端开发人员

视图(views):我自己的理解是,联系功能和前端样式的一个中间件

视图设计:要考虑你的网站需要哪些页面!!!你的网站什么功能就一一对应去考虑~(学习中)

设计Views

编辑views.py文件

把url设置好:1.APP下新建一个url.py文件,设置 2.mysites中的url.py,关联APP的urls

*url()方法接收4个参数,有两个是必填的,1.正则表达式(网址) 2.对应的视图(views)内的功能 3.名字

views怎么写:以html为模板把参数写进去,这样前端出来的效果,就功能和样式都有了。(例如:给动物穿衣服一样)

*views.py中的context处理器(RequestContext处理器) //参考 个人理解是:通过XX处理器,把Python对象映射到模板中使用(为了楼上这个目的)

*模板中调用参数的都要用{{}}

*在views.py中还要考虑异常处理的(加分项了) 

*模板编写参考

*模板中写死的url参数,我们都要给它改掉。1.优化模板文件代码 2.让每个模块之间的关联更参数化(紧密吧)//这个你要考虑下页面之间的跳转什么的 3.应用如果多了的话,不可能一个一个去写(虽然我没可能有这个情况)

 在视图文件中添加表单

*如果你有用到Post/Get与服务器相关的操作,就要考虑CSRF(跨站请求伪造),要考虑安全问题,这些django都有为你考虑到。

*HttpResponse,HttpResponseRedirect (第一个参数都是网址) 具体再看下参考文献吧

*reverse方法:reverse(viewname[, urlconf=None, args=None, kwargs=None, current_app=None]) //这个函数一般放在HttpResponRedirect中的

*CSRF开启来,至今不知道为什么表单提交还是会报错(记录一下)

使用通用视图

普通方法都是从数据库调用(参数)用Py再去一步一步去执行要做的操作 //参考

*urls文件中匹配的模型名要和模型文件中的一致

*转换成通用视图的三个步骤:

  1. Convert the URLconf.
  2. Delete some of the old, unneeded views.
  3. Introduce new views based on Django’s generic views.

Django的测试脚本(tests.py)

官网的介绍太高能了。反正我们先找个BUG再来写测试脚本,抓出这个BUG o(╯□╰)o

目标:抓BUG。

BUG: 

//博主作为一个测试人员,表示单元测试无力。先放着吧

自定义你自己APP的样式

走到这一步,你应该有了一个可以用的网站,虽然比较丑。所以现在我们来套样式表和加图片,各种调颜色啥的。

这种时候我们就有css,js,图片等文件,少的话还好,你放好在自己的服务器中,但如果是大型APP,就比较复杂了。django.contrib.staticfiles为您服务! //具体的之后再解释。

目标:做好网站的UI

*建立static文件夹在你的APP目录下,然后再新建一个文件夹(APP命名),用于存放你的css,js等文件吧

*创建css文件,然后把它关联到模板脚本。这样你的网站就有这个style啦

#把下面的代码添加到对应的模板中去
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% 'polls/style.css'%}" />

效果图(比较挫,自己设计去吧)

Django进阶学习 - 复用性

 简单说就是把我们做好的APP拷贝出来,写好使用文档,给别人用。在这还是属于开发环境的。(具体的看demo中的django-polls文件夹

=========================================================================

《The Django Book》学习笔记

*把django-admin.py路径加入到PATH。项目包还是不要和服务器包放一起比较好。

*project下的url设置 -> app下的url设置 要注意层次关系

** project下的管理app的urls文件(导进去);app下的管理各个不同页面的url匹配问题

posted on 2014-10-08 16:53  Jenny_HUI  阅读(389)  评论(0编辑  收藏  举报

导航