一. Django 开发之准备工作 - 软件安装 & Django 知识 ( Win10 )

558 阅读3分钟

1. 软件安装

  • Python 3.7 下载 & 安装

  • 安装虚拟环境,创建 DjangoBlog 虚拟环境

  • virtualenv && virtualenvwrapper-win 安装

pip install virtualenv
pip install virtualenvwrapper-win
  • 配置 virtualenvwrapper 虚拟环境存放路径:

变量名:WORKON_HOME;变量值:D:\Envs (填写自己想存放的路径)

  • virtualenvwrapper基本使用:
$ mkvirtualenv DjangoBlog    # 创建虚拟环境
$ mkvirtualenv DjangoBlog --python=C:\Python\Python37\python.exe    # 若想指定python版本,可通过"--python"指定python解释器
$ workon DjangoBlog    # 切换到某个虚拟环境
(DjangoBlog)$ deactivate    # 退出当前虚拟环境
$ rmvirtualenv DjangoBlog    # 删除某个虚拟环境
$ lsvirtualenv    # 列出所有虚拟环境
$ cdvirtualenv    # 进入到虚拟环境所在的目录
$ lssitepackages    # 列出当前环境已安装的包
  • 安装 Django 2.x: (DjangoBlog)$ pip install django

  • 下载并安装 PyCharm Profession

  • 下载并安装 MySQL 8.x

  • 安装 mysqlclient: (DjangoBlog)$ pip install mysqlclient

  • 在 www/ 文件夹下,创建 Django Blog 项目:(DjangoBlog)$ django-admin startproject DjangoBlog

  • cd 到 www/DjangoBlog 项目下,启动项目:(DjangoBlog)$ python manage.py runserver -完成项目开发后,进行 Packages 迁移(在虚拟环境内):

pip freeze > requirements.txt # 环境迁出,txt文件可以任意命名
pip install -r requirements.txt # 环境迁入

2. Django知识:

  • 同局域网下如何访问(待补充)

2.1 url 与视图函数

  • django的settings.py中ROOT_URLCONF的值是视图函数对应的url映射路径,默认是urls.py

  • url 映射和传参规则

  • url 传递的参数通过 request.GET['参数名'] 获取

  • path 和 re_path 函数

  • include 函数,url模块化

  • url 转换器 convertor,可自定义 url 转换器:register_converter函数

  • url 命名:

    • url命名空间
    • 应用命名空间
    • 实例命名空间:request.resolver_match.namespace获取实例命名空间,一个url映射表示一个实例
  • views视图函数第一个参数必须是request,必须返回HttpResponse对象

  • reverse 函数

  • redirect 函数

  • 请求装饰器,现在请求方法 @request_method

  • request对象

    • path

    • get_full_path()

    • get_raw_uri()

    • get_host()

    • META # 存放header信息的对象,META['HTTP_X_FORWARDED_FOR'] #ip地址

    • is_secure() # 是否采用https协议

    • is_ajax()

    • GET # 存放查询字符串的对象

    • POST # 存放post方式上传的参数的对象

    • FILES # 存放前端post过来的文件的对象

    • QueryDict 对象 request.GET 和 request.POST 都是 QueryDict 对象

  • HttpResponse对象

  • HttpResponse.set_cookie()

  • 获取cookie: request.COOKIES.get('xxx')

  • request.session

    • get
    • pop
    • keys
    • items
    • clear
    • flush
    • set_expiry()
  • HttpResponse.delete_cookie()

  • 类视图

  • 上下文处理器

  • 中间件

  • 授权和权限

diango.views.generic.base.View

class List(View):
    def get(self, request, *args, **kwargs):
        pass
  • ListView -表单
from django import forms
class AForm(forms.Form):
    pass
  • 表单字段验证器
    • CharField
    • FloatField
    • EmailField
    • URLField
    • ImageField
    • 自定义验证器
    • ModelForm
    • clean_xxx 方法
    • clean 方法
    • forms.ModelForm
  • 文件上传
  • 静态模板
from django.views.generic import TemplateView
path('', TemplateView.as_view(template_name='index.html')

2.2 Django 模板

  • 在 settings.py 的 TEMPALTES 中配置模板路径等
  • DTL 模板语法: ``
{{ var }} 
{% for in %} {% endfor %}
{% with %} {% endwith %}
{% url 'blog:list' %}  # 利用 url 命名空间反转 url
{% url 'blog:detail' blog_id='1' %}   # 利用 url 命名空间反转 url ,传递多个参数用空格分隔;模板中的 url 标签和 reverse 函数作用类似
{% autoescape off %} {% endautoescape %}   # 关闭 html 转义,默认开启
{% verbatim %} {% endverbatim %} 取消模板解析
{{ value|add:"2"}}   # add 过滤器
{{ birthday|date"Y/m/d H:i:s" }}   # 日期过滤器
{{ age|default:"0" }}    # 默认值过滤器,还有 first\last\floatformat\join\length\truncatechars 过滤器等
  • 自定义模板过滤器,过滤器最多有两个参数
  • 在my_filter.py中
from django import template

register = template.Library()
def abc(value, value1):
    pass
    
register.filter('abc', abc)

在模板中使用过滤器

{% load my_filter %}
...
{{value|abc:'123' }}
...
  • 加载静态文件
  • render 和 render_to_string 函数

2.3 Django ORM

  • 类对应表,类属性对应字段,实例对应一条数据

  • 常用字段:

    • AutoField
    • BigAutoField
    • BooleanField # 值可以为 True、False
    • NullBooleanField # 值可以为空、True、False
    • CharField
    • TextField
    • DateField
    • DateTimeField
    • EmailField
    • FileField
    • ImageField
    • FloatField
    • UUIDField
    • URLField
  • 常用字段参数

    • null
    • blank
    • db_column
    • default
    • primary_key
    • unique
  • Meta 类

    • db_table
    • ordering # list
  • 外键和表关系

    • ForeignKey
    • OneToOneKey
    • ManyToManyKey
  • 查询条件(filter方法)

    • 模型.objects.get 返回的是实例
    • 模型.objects.filter 返回的是QuerySet,通过QuerySet.query可以查看SQL语句
    • exact & iexact
    • contains & icontains
    • in
    • gt & gte & lt & lte
    • startwith & istartwith & endswith & iendswith
    • regex 正则表达式
    • range
    • date
    • year
    • month
  • 关联表查询

  • 聚合函数查询(aggregate 方法,返回 dict 对象;annotate 方法,返回 QuerySet 对象,用 groupby 分组)

  • Avg

  • Count

  • Max

  • Min

  • Sum

  • F 表达式:动态获取某个字段的值

  • Q 表达式:包裹查询条件,实现多条件查找

  • QuerySet 对象方法:

    • filter
    • exclude
    • annotate
    • order_by
    • values
    • values_list
    • all
    • select_related 多对一
    • prefetch_related 一对多 多对多 Prefetch类
    • defer
    • only
    • get
    • create
    • get_or_create
    • bulk_create
    • count
    • first
    • last
    • aggregate
    • exists
    • distinct
    • update
    • delete
    • 切片操作
  • 打印原生SQL查询语句:

    • 对于 QuerySet 对象:QuerySet对象.query

    • 对于 非 QuerySet 对象:

      from django.db import connection
      print(connection.queries)