Django学习笔记(一)

572 查看

笔记来源:自强学堂-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 项目名称。
  2. 新建app
    #执行该命令:新建的app与project处于一个文件project下
    django-admin.py startapp app-name 
    #执行这个命令app在project-name子目录下
    #执行这个命令的前提:cd projectname/
    python manage.py startapp app-name
    一般一个项目有多个app,通用的app可以在多个项目中使用
  3. 同步数据库
    #Django 1.7.1以及以上版本需要用一下命令
    python manage.py makemigrations
    python manage.py migrate
    这种犯法可以创建表,当在models.py中新增了类是,运行它可以自动的在数据库中创建表,不用手动创建。
  4. 使用开发服务器
    开发服务器:开发时使用,只用来测试,不要用于生产环境
    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
  5. 清空数据库
    该命令执行后只留下空表
  6. 创建超级管理员
    python manage.py createsuperuser
    # 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
    # 修改 用户密码可以用:
    python manage.py changepassword username
  7. 导出数据
    #注意 导出的xxx.json文件位于 projectname文件夹下
    python manage.py dumpdata appname > appname.json
    python manage.py loaddata appname.json
  8. Django 项目环境终端
    python mange.py shell
    如果你安装了 bpython 或 ipython 会自动用它们的界面,推荐安装 bpython。
    这个命令和 直接运行 python 或 bpython 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据,还有一些小测试非常方便。
  9. 数据库命令行
    python manage.py dbshell
    在这个终端可以执行数据库的SQL语句
  10. 更多命令
    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
  2. 其他功能
    • 在网页上做加减法
      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/
  2. 循环、条件判断、常用标签、过滤器的使用
    • 显示一个基本的字符串在网页上
      #views.py
      def home(request):
         string = u'Hello world!'
         return render(request,'home.html',{'string':string})
      #home.html
      {{ string }}
    • 基本for循环和List内容的显示
    • 显示字典内容
    • for循环和if条件操作
    • 模板中的逻辑操作
    • 获取当前网址、当前用户