Django笔记文档

pip3 install django
命令:
    # 创建Django程序
    django-admin startproject mysite
    # 进入程序目录
    cd mysite
    # 启动socket服务端,等待用户发送请求
    python manage.py runserver 127.0.0.1:8080

Django程序目录:
    mysite
        mysite
            - settings.py  # Django配置文件
            - url.py       # 路由系统:url->函数
            - wsgi.py      # 用于定义Django用socket, wsgiref,uwsgi

        # 对当前Django程序所有操作可以基于 python manage.py runserver
        manage.py 


1. 创建project
2. 配置:
- 模板路径
template目录

            TEMPLATES = [
                {
                    'BACKEND': 'django.template.backends.django.DjangoTemplates',
                    'DIRS': [os.path.join(BASE_DIR, 'template')],
                    'APP_DIRS': True,
                    'OPTIONS': {
                        'context_processors': [
                            'django.template.context_processors.debug',
                            'django.template.context_processors.request',
                            'django.contrib.auth.context_processors.auth',
                           'django.contrib.messages.context_processors.messages',
                        ],
                    },
                },
            ]


        - 静态文件路径
            static目录

            STATIC_URL = '/static/'
            STATICFILES_DIRS = (
                os.path.join(BASE_DIR,'static'),
            )

3. 额外配置
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        #'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]

母版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
layout.html

{% block x1 %}{%endblock%}
<h1>ff</h1>
{% block x2 %}{%endblock%}
<h1>2</h1>...
{% block x3 %}{%endblock%}

index.html
{%extends 'layout'%}

{% block x1 %}dfssssssdfsd{%endblock%}

{% block x2 %}dfsdfsd{%endblock%}

{% block x3 %}fff{%endblock%}

Cookie

在浏览器上保存的键值对

1
2
3
4
5
6
7
8
def index(request):
request.COOKIES
request.get_signed_cookie('k1',salt='ff')
obj = HttpReponse(..)
obj = render(...)
obj = redirect(..)
obj.set_cookie(k1,v1,max_age)
obj.set_signed_cookie(k1,v1,max_age,salt='fff')

路由系统

1
2
3
4
url -> 函数
a. /login/ -> def login
b. /add-user/(\d+)/ -> def add_user(request,a1)
c. /add-user/(?P<a1>\d+)/ -> def add_user(request,a1)
PS:
    终止符:
        ^edit$
    伪静态
        url(r'^edit/(\w+).html$', views.edit),
d. 路由分发
    urls.py
        url(r'^app01/', include('app01.urls')),

    app01.urls.py
        url(r'^index.html$', views.index),
e. /add-user/(\d+)/  ->  def add_user(request,a1)  name=n1
    根据名称可以反向生成URL
    1. 在Python代码中
        from django.urls import reverse
        v = reverse('n1',kwargs={'a1':1111})
        print(v)

    2. url(r'^login/', views.login,name='m1')
    {% url "m1" %}

ORM操作

步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1. 创建数据库
2. ORM利用pymysql第三方工具连接数据库
默认:
SQLlite
MySQL:
mysql -> MySQLDB(修改django默认连接mySQL方式

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'s4day70db',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': 3306,
}
}
3. 在init文件

import pymysql
pymysql.install_as_MySQLdb()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
MySQL -> settings.databases
- pymysql.install_as_mysqldb()

- 类
class Foo(models.Model):
# nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
class Bar(models.Model):
title = ...
f = FK...

Foo.objects.create(name='ff')
result = Foo.objects.all()
QuerySet[Foo(),Foo()Foo()Foo()]
result = Foo.objects.filter(id=1).first()
result = Foo.objects.filter(name="alex").first()
QuerySet[obj,]
QuerySet[obj,obj,obj]
obj

Foo.objects.filter(id=1).delete()
Foo.objects.filter(id=1).update()

ORM操作表:
创建表
修改表
删除表
操作数据行:
增删改查

python manage.py makemigrations

  1. 视图函数 CBV,FBV