Django的命令:

版权声明:所有非原创内容来自网络,如有侵权联系我删除 https://blog.csdn.net/weixin_43063753/article/details/84815036

1.Django的命令:

  1. 下载
    1. pip install django==1.11.16
    2. pip install django==1.11.16 -i 源
  2. 创建项目
    1. django-admin startproject 项目名
  3. 启动项目
    1. cd 项目目录下 找到manage.py
    2. python manage.py runserver # 127.0.0.1:8000
    3. python manage.py runserver 80 # 127.0.0.1:80
    4. python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80
  4. 创建一个APP
    1. python manage.py startapp app名称
    2. 注册
  5. 数据库迁移
    1. python manage.py makemigrations # 在app下的migrations文件夹下记录 models的变更记录
    2. python manage.py migrate # 将models的变更记录同步到数据库中

2.Django的配置

  1. 注释一个CSRF的中间件 可以提交POST
  2. databases 数据库
    1. ENGINE : mysql
    2. NAME : 数据库的名称
    3. HOST:主机的IP
    4. PORT:3306
    5. USER: 用户名
    6. PASSWORD: 密码
  3. 静态文件的配置
    1. STATIC_URL = ‘/static/’ # 别名
    2. STATICFILES_DIRS = [
      os.path.join(BASE_DIR,‘static’)
      ]
  4. app
    1. INSTALLED_APPS = [
      ‘app01’ ,
      ‘app01.apps.App01Config’
      ]
  5. TEMPLATES 模板相关的配置
    1. DIRS [ os.path.join(BASE_DIR,‘templates’)]

3.Django使用mysql数据库的流程:

  1. 创建一个mysql数据库

  2. 在settings中进行配置
    DATABASES = {
    ‘default’: {
    ‘ENGINE’: ‘django.db.backends.mysql’,
    ‘NAME’: ‘bookmanager’,
    ‘HOST’: ‘127.0.0.1’,
    ‘PORT’: 3306,
    ‘USER’: ‘root’,
    ‘PASSWORD’: ‘’,

        }
    }
    
  3. 在与settings同级目录下的init的文件中写:
    import pymysql
    pymysql.install_as_MySQLdb()

  4. 在app下的models中写类(models.Model)
    class Publisher(models.Model): # app01_publisher
    pid = models.AutoField(primary_key=True) # pid 主键
    name = models.CharField(max_length=32, unique=True) # 出版社名称

        def __str__(self):
            return self.name
    
    
    class Book(models.Model):
        title = models.CharField(max_length=32, unique=True)  # 书籍的名称
        publisher = models.ForeignKey('Publisher', on_delete=models.CASCADE)  # 关联了出版社
    
        def __str__(self):
            return self.title
    
    
    class Author(models.Model):
        name = models.CharField(max_length=32, unique=True)  # 作者的名字
        books = models.ManyToManyField('Book')  # 表示作者和书籍 多对多的关系
        # books = models.ManyToManyField('Book', through='Author_book',)  # 表示作者和书籍 多对多的关系
    
        def __str__(self):
            return self.name
    

    5.数据库迁移的命令

    1. python manage.py makemigrations # 在app下的migrations文件夹下记录 models的变更记录
    2. python manage.py migrate # 将models的变更记录同步到数据库中

4.ORM的对应关系

类     —— 》  表

对象  ——》 记录(数据行)

属性  ——》 字段

5.ORM操作

  1. 查询
    1. models.Publisher.objects.all() # 查询所有的数据 ——》 QuerySet 对象列表
    2. models.Publisher.objects.get() # 获取满足条件的一个对象 ——》 单独的对象
    3. models.Publisher.objects.filter() # 获取满足条件的所有对象 ——》对象列表
    4. models.Publisher.objects.all().order_by(‘id’) # 排序 —— 》 对象列表
    5. pub_obj.pk ——》 主键
    6. pub_obj.name
    7. 外键
      1. book_obj.publisher ——》 关联的对象
      2. book_obj.publisher_id ——》从book表中获取关联对象的ID
      3. book_obj.publisher.name ——》 关联的对象的属性
    8. 多对多
      1. author_obj.books ——》 管理对象
      2. author_obj.books.all() ——》 关联的所有的对象 对象列表
      3. book_obj.author_set ——》管理对象、
  2. 增加
    1. models.Publisher.objects.create(name=‘xxx’) ——》 对象
    2. 外键
      1. models.Book.objects.create(title=‘xxx’,publisher=pub_obj)
      2. models.Book.objects.create(title=‘xxx’,publisher_id=pub_obj.id)
    3. 多对多
      1. models.Author.objects.create(name=‘xxxx’) ——》 author_obj
      2. author_obj.books.set([多个要关联对象的id,])
      3. author_obj.books.set([多个要关联对象,])
  3. 删除
    1. models.Author.objects.get(id=1).delete()
    2. models.Author.objects.filter(id=1).delete()
  4. 修改
    1. pub_obj.name = ‘new_xxxx’
    2. pub_obj.save()
    3. 外键
      1. book_obj.title = ‘xxxx’
      2. book_obj.publisher = pub_obj 或者 book_obj.publisher_id = pub_obj .id
      3. book_obj.save()
    4. 多对多
      1. author_obj.name = ‘new_name’
      2. author_obj.save()
      3. author_obj.books.set([多个要关联对象,]) author_obj.books.set([多个要关联对象的id,])

6.request

  1. request.method ——》 请求方式 8 种 GET/POST
  2. request.GET ——》 url上的参数 xxxx/?id=1&name=aelex {} [] request.GET.get(‘id’)
  3. request.POST ——》 form表单提交的POST的数据 {} [] request.POST.get()

7.函数的返回值

  1. HttpResponse(‘字符串’) ——》 返回字符串

  2. render(request,‘模板的文件名’,{k1:v1}) ——》返回一个完整的页面

  3. redirect(’‘跳转的地址’’) ——》 重定向 响应头 Location : ‘跳转的地址’
    1.MVC和MTV

  4. MVC

  5. C Controller : 逻辑的控制

  6. M Model : 存取数据

  7. V View : 信息的展示

  8. MTV

    1. M : model ORM操作
    2. T: Template 模板
    3. V: View 业务逻辑

2.变量

{{ 变量 }} 使用.来获相关属性和方法

3.过滤器

语法: {{ value|filter_name:参数 }} # 参数最多只有一个

  1. 内置过滤器

    1. default 提供默认值
      {{ kong|default:‘nothing’ }}

    2. date 日期格式化
      {{ now|date:‘Y-m-d H:i:s’ }}

      settings中可配置全局的日期时间格式化
      USE_L10N = False
      DATETIME_FORMAT = 'Y-m-d H:i:s'
      
    3. safe 不进行转义
      {{ js|safe }} # 告诉Django 前面的内容是安全的,不必转义

  2. 自定义filter

    1. 定义
      1. 在APP下创建一个叫templatetags的python包; 不能变的,必须是包,名字必须是templatetags

      2. 在包中创建一个py文件 my_filters;

      3. 在py文件中写代码
        from django import template

        register = template.Library()  # register的名字不能改
        
      4. 写函数
        @register.filter
        def add_dsb(value, arg):
        return “{}_{}”.format(value, arg)

      5. 给定义的函数加装饰器
        @register.filter
        def add_dsb(value, arg):

    2. 使用
      在模板中使用:
      1. 导入定义的文件
        {% load my_filter %}
      2. 使用过滤器
        {{ name|add_dsb:‘very_dsb’ }}

4.标签

{% csrf_token %}

添加在form表单中   就可以提交POST请求

5.母版和继承

  1. 母版
    就是一个普通的HTML文本,将多个页面公共部分的内容提取出来,在页面中定义多个block块
    {% block content %}
    {% endblock %}
    1. 继承
      在子页面中,继承母版 {% extends ‘base.html’ %}
      可以重新书写block块中内容
    2. 注意事项
    3. {% extends 'base.html' %} 写在第一行,上面不写内容
      
    4. 要修改的 内容写在block块中,写在外面不显示
    5. {% extends ‘base.html’ %} base.html 记得带上引号,不然当做变量去查找
    6. 定义多个block块,一般要定义上 css和js

6.组件

把多个页面公用的HTML代码放在一个HTML文件中    —— 》组件  nav.html

使用:  {% include  ‘nav.html’  %}

7.静态文件相关

{% load static %}

{% static ‘静态文件相对路径’ %} ——》 获取到别名,跟后面的参数进行拼接

{% get_static_prefix %} ——》 获取到别名

<link rel="stylesheet" href="{% get_static_prefix %}plugins/bootstrap-3.3.7/css/bootstrap.css">

8.自定义inclusion_tag

猜你喜欢

转载自blog.csdn.net/weixin_43063753/article/details/84815036