初识Django

第一个Django工程

Django工程目录

  • project name
    • project name[项目容器]
      • init.py[一个空文件告诉python该工程是一个python工程]
      • settings.py[该Django项目的配置和设置文件]
      • urls.py[该Django项目的url声明,一份由Django驱动的网站目录]
      • wsgi.py[一个WSGI兼容的WEB服务器的入口,以便运行项目]
    • manage.py[一个实用的命令行工具,可让你以各种方式与该Django项目进行交互]

视图和URL配置

视图

  • 自定义视图:自定义一个py文件并编写相关方法。

URL配置

from django.conf.urls import url

from . import view

urlpatterns = [
 url(r'^$', view.hello),
]

导入url配置的包和视图的包
定义用户访问对应url后执行的代码

url()方法

该方法有四个参数对应参数的具体意义为:

  • regex: 正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。
  • view: 用于执行与正则表达式匹配的 URL 请求。
  • kwargs: 视图使用的字典类型的参数。
  • name: 用来反向获取 URL。

Django中的MVC

一般用法

  • 将视图文件存储在project name/templates目录下,写成html文件
  • 在view中使用render()函数将html返回给用户。

render()函数

  • 参数

    request:通用参数
    template_name:我们定义的模版(html文件)名
    context:要传入文件中渲染呈现的数据,默认是字典格式
    content_type:生成的文档要使用的MIME类型,默认为DEFAULT_CONTENT_TYPE设置的值
    status:http的响应代码:默认是200
    using:用于加载模版所使用的模版引擎名称

Django模版中常用的语法规则

条件语句

  • if语句

    {% if condition %}
                ...display
            {% endif %}
    
  • if-elseif-else

    {% if condition1 %}
                ...display1
            {% elif condition2 %}
                ...display2
            {% else %}
                ...display3
            {% endif %}
    

if语句接受and、or或者not对多个变量进行判断
根据判断条件进行输出数据

循环语句

  • for循环

    {% for athlete in athlete_list %}
            ...
            {% endfor %}
    
  • 逆序迭代

    {% for athlete in athlete_list reversed %}
            ...
            {% endfor %}
    

模版会渲染标签之间的所有语句

比较语句

  • ifequal语句

    {% ifequal user currentuser %}
            ...
            {% endifequal %}
    
  • ifnotequal语句

    {% ifnotequal user currentuser %}
            ...
            {% endifnotequal %}
    

ifequal和ifnotequal语句都支持可选的else语句

注释标签

  • 注释标签的使用方法

过滤器

  • 小写过滤器

    {% raw %}name|lower{% endraw %}
    

name在被过滤器过滤后文档内容会被转换为小写

  • 过滤管道的嵌套

    {% raw %}my_list|first|upper{% endraw %}
    

元素经过第一个过滤器过滤之后的元素可以作为下一个过滤器的输入元素
将my_list列表的第一个元素转换为大写形式

  • 带参数的过滤器

    {% raw %}bio|truncatewords:"30"{% endraw %}
    

过滤器的参数总是跟随在冒号后并且总以双引号包含
这个过滤器将显示bio的前30个词

  • 其他过滤器

    • addslashes:添加反斜杠到任何反斜杠/单引号/双引号前面
    • date:按指定格式字符串参数格式化date或者datetime对象,实例:

      pub_date|date:"F j,Y"
    • length:返回变量的长度

include标签

  • include标签

    {% include "nav.html" %}
    

include标签允许在模版中包含其他的模版内容

模版继承

  • 模版继承

    • 继承语法

      1
      <code>{% extends "base.html" %}</code>
* 可被重载的块

    
1
2
3
<code>{% block blockname %}
...
{% endblock %}</code>

Django 模型

数据库配置

  • setting.py文件中DATABASES语句块内的内容

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',  # 或者使用 mysql.connector.django
            'NAME': '数据库名',
            'USER': '用户名',
            'PASSWORD': '密码',
            'HOST':'主机名',
            'PORT':'端口号',
        }
    }
    

    新建一个App

  • 进入终端输入如下指令:

    python3 manager.py startapp appname
    
  • App中models的作用

    models是具体数据的抽象化

  • 声明App

    在setting.py的INSTALLED_APPS模块下添加新建的AppName

  • 创建model

    在projectName/appName/models.py文件中创建类(数据类)如下:

    from django.db import models 
    class Data(models.Model):
        name = models.CharField(max_length=20)  #字符类型数据,最大长度为20
    
  • 根据models创建表结构

    在命令行中运行如下代码:

    python3 manager.py migrate #创建表结构
    python3 manager.py makemigrations #通知Django我们的模型有变更
    python3 manager.py migrate #创建表结构
    

数据库操作

添加数据

  • 在projectName/projectName/下创建operatedb.py文件添加代码如下

    from django.http import HttpResponse
    from projectName/appName import Data
    
    def addData(request):
        data = Data(name='zh_eastsun')
        data.save()
        return HttpResponse('<p>数据添加成功</p>')
    

获取数据

  • 在peojectName/projectName/operatedb.py文件中添加如下代码:

    def getData(request):
        response = ""
        # 获取数据库中的所有数据
        list = Data.objects.all()
        # 根据筛选条件获取某条数据
        response = Data.objects.filter(id=1)
        # 获取某个单个数据
        response = Data.objects.get(id=1)