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)
-