Django学习笔记(一)

笔记来源:自强学堂-Django教程
这个教程真的非常好用!强烈推荐

Django简介-组成部分


  • urls.py:网址入口,关联到对应的views.py中的一个函数(或者generic类),访问网址就对应一个函数。
  • views.py:处理用户发出的请求,从urls.py中对应过来,通过渲染templates中的网页可以将显示内容,比如登录后的用户名,用户请求的数据,输出到网页。
  • models.py:与数据库操作相关,存入或读取数据时用到这个,用不到数据库就不使用
  • forms.py:表单。用户在浏览器上输入数据提交,对数据的验证工作以及输入框的生成等工作,也可以不使用。
  • templates 文件夹:views.py 中的函数渲染templates中的html模板,得到动态内容的网页,也可以用缓存来提高速度。
  • admin.py:后台。通过少量代码就可以拥有一个强大的后台。
  • settings.py:Django的设置,配置文件。如DEBUG的开关,静态文件的位置。

Django 基本命令


这些命令很重要,尽量记得

  1. 新建一个django project
django-admin.py startproject project-name

一个project为一个项目,project-name 项目名称。

  1. 新建app
#执行该命令:新建的app与project处于一个文件project下
django-admin.py startapp app-name 
#执行这个命令app在project-name子目录下
#执行这个命令的前提:cd projectname/
python manage.py startapp app-name

一般一个项目有多个app,通用的app可以在多个项目中使用

  1. 同步数据库
#Django 1.7.1以及以上版本需要用一下命令
python manage.py makemigrations
python manage.py migrate

这种犯法可以创建表,当在models.py中新增了类是,运行它可以自动的在数据库中创建表,不用手动创建。

  1. 使用开发服务器
    开发服务器:开发时使用,只用来测试,不要用于生产环境
python manage.py runserver
# 当提示端口被占用的时候,可以用其它端口:
python manage.py runserver 8001
python manage.py runserver 9999
(当然也可以kill掉占用端口的进程)
# 监听所有可用 ip (电脑可能有一个或多个内网ip,一个或多个外网ip,即有多个ip地址)
python manage.py runserver 0.0.0.0:8000
# 如果是外网或者局域网电脑上可以用其它电脑查看开发服务器
# 访问对应的 ip加端口,比如 http://172.16.20.2:8000
  1. 清空数据库
    该命令执行后只留下空表
  2. 创建超级管理员
python manage.py createsuperuser
# 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
# 修改 用户密码可以用:
python manage.py changepassword username
  1. 导出数据
#注意 导出的xxx.json文件位于 projectname文件夹下
python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json
  1. Django 项目环境终端
python mange.py shell

如果你安装了 bpython 或 ipython 会自动用它们的界面,推荐安装 bpython。
这个命令和 直接运行 python 或 bpython 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据,还有一些小测试非常方便。

  1. 数据库命令行
python manage.py dbshell

在这个终端可以执行数据库的SQL语句

  1. 更多命令
python manage.py

可以看到详细列表,忘记命令时很好用

Django 视图与网址


  1. 新建一个项目的基本步骤
#1. 新建一个项目(project), 名称为 mysite
django-admin.py startproject mysite
#2. 新建一个应用(app), 名称叫 learn
#到外层那个 mysite 目录下(不是mysite中的mysite目录)
python manage.py startapp learn
#**把我们新定义的app加到settings.py中的****INSTALL_APPS****中**
#修改 mysite/mysite/settings.py
#如果不添加这一步,django 就不能自动找到app中的模板文件和静态文件
#3. 定义视图函数(访问页面的内容)
#在views.py中修改 注意:coding:utf-8
#4. 定义视图函数相关的URL(网址)
# mysite/mysite/urls.py
#5. 运行服务器
python manage.py runserver
  1. 其他功能
  • 在网页上做加减法
    1. 采用 **/add/?a=4&b=5 **这样GET方法进行
#views.py
from django.shortcuts import render
from django.http import HttpResponse
def add(request):
      a = request.GET['a']
      b = request.GET['b']
      c = int(a)+int(b)
      return HttpResponse(str(c))
#注:request.GET 类似于一个字典,更好的办法是用 request.GET.get('a', 0) 当没有传递 a 的时候默认 a 为 0
#urls.py
from calc import views as calc_views
url(r'^add/', calc_views.add, name='add'),  # 注意修改了这一行
#访问http://127.0.0.1:8000/add/?a=4&b=5
2. 采用/add/3/4/这样的网址方式
#views.py
def add2(request,a,b):
      c = int(a)+int(b)
      return HttpResponse(str(c))
#urls.py
url(r'^add/(\d+)/(\d+)/$',calc_views.add2,name='add2')
#访问
http://127.0.0.1:8000/add/4/5/
  • url中name的作用
    当网址发生改变的时候,访问能够依然有效
不带参数的:
{% url 'name' %}
带参数的:参数可以是变量名
{% url 'name' 参数 %}
例如:
<a href="{% url 'add2' 4 5 %}">link</a>

上述代码渲染成的最终的页面是:

<a href = "/add2/4/5">link</a>
#这样就可以通过 {% url 'add2' 4 5 %} 获取到对应的网址 /add2/4/5/

注意:注意看重点 add2 变成了 new_add,但是后面的 name='add2' 没改,这时 {% url 'add2' 4 5 %} 就会渲染对应的网址成 /new_add/4/5/
reverse 函数也是一样,获取的时候会跟着变成新的网址
让以前的就网址自动跳转到新的网址:

#views.py
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
def old_add2_redirect(request, a, b):
    return HttpResponseRedirect(
        reverse('add2', args=(a, b))
    )
#urls.py
url(r'^add2/(\d+)/(\d+)/$', calc_views.old_add2_redirect),
url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),

Django 模板


之前都是通过简单的django.http.HttpResponse把内容显示到网页上,现在可以通过渲染模板的方式来显示内容。

  1. 基本步骤
#1.创建项目和应用
django-admin.py startproject projectname
cd projectname
python manage.py startapp appname
#2.把应用加入到settings.py INSTALLED_APPS当中
#3.在appname/views.py 当中写一个首页的视图
from django.shortcuts import render
def home(request):
        home render(request,'home.html')
#4. 在appname下新建templates文件夹,里面新建一个home.html
#默认配置下django会自动找到app下面的templates文件夹中的模板文件
#5. 修改home.html
#6. 将视图函数对应到网址,更改projectname/urls.py
from appname import views as appname_views
urlpatterns = [
      url(r'^$',appname_views.home,name='home'),
]
#7.创建数据库表
python manage.py migrate
#8.运行开发服务器
python manage.py runserver

注意几点:

  • Django 查找模板的过程是在每个 app 的 templates 文件夹中找(而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找)。各个 app 的 templates 形成一个文件夹列表,Django 遍历这个列表,一个个文件夹进行查找,当在某一个文件夹找到的时候就停止,所有的都遍历完了还找不到指定的模板的时候就是 Template Not Found (过程类似于Python找包)。
  • 模板命名规则:仅和该app相关的模板放在 app/templates/app/
  1. 循环、条件判断、常用标签、过滤器的使用
  • 显示一个基本的字符串在网页上
#views.py
def home(request):
        string = u'Hello world!'
        return render(request,'home.html',{'string':string})
#home.html
{{ string }}
  • 基本for循环和List内容的显示
  • 显示字典内容
  • for循环和if条件操作
  • 模板中的逻辑操作
  • 获取当前网址、当前用户
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容