django基础笔记速查表-(配置,模板,视图,ORM,Django-Redis)


django

创建项目和app

  1. 安装django模块
pip install django
  1. 创建项目
django-admin startproject test1
  1. 默认项目的文件树:
└─test1
    │  manage.py [不要动]
    │
    └─test1
            asgi.py [不要动]
            settings.py 常修改
            urls.py 常修改
            wsgi.py [不要动]
            __init__.py
  1. 创建app
python manage.py startapp app1

app的文件树:

├─app1
│  │  admin.py [不用动]
│  │  apps.py [不用动]
│  │  models.py 操作数据库
│  │  tests.py [不用动]
│  │  views.py 视图文件
│  │  __init__.py
│  │
│  └─migrations [不用动]
│          __init__.py
  1. 注册app
    在settings.py的INSTALLED_APPS中加入app1.apps.App01Config
  2. 在urls.py中添加路由
from app1 import views
#...
path('index/', views.index)
  1. 在views.py中添加index函数
from django.shortcuts import render, HttpResponse

# Create your views here.

def index(request):
    return HttpResponse("欢迎")
  1. 启动服务
python manage.py runserver

Django 模板基础

1. 加载静态文件
  • 使用 {% load static %} 标签来加载静态文件。
  • 示例:
{% load static %} <img src="{% static 'baidu.png' %}">
2. 循环遍历数据
  • 使用 {% for %}{% endfor %} 标签来遍历数据。
  • 示例:
{% for i in sidebar %}
<a href="#">{{ i }}</a> 
{% endfor %}
3. 条件判断
  • 使用 {% if %}, {% elif %}, 和 {% else %} 标签来进行条件判断。
  • 示例:
{% if condition %}
<p>Condition is true</p>
{% elif other_condition %}
<p>Other condition is true</p>
{% else %}
<p>No conditions are true</p>
{% endif %}
4. 过滤器
  • 使用过滤器来处理变量值。
  • 示例:
{{ variable|lower }}  <!-- 将变量转换为小写 -->
5. 注释
  • 使用 {# ... #} 来添加注释。
  • 示例:
html{# This is a comment #}

Django 视图基础

1. HttpResponse

HttpResponse 是一个类,用于返回响应给客户端。可以直接返回字符串、HTML 内容等。

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello, world!")
2. render

render 函数用于将模板渲染为 HTML 并返回给客户端。需要传递三个参数:请求对象 (request)、模板文件名、上下文数据(字典)。

from django.shortcuts import render

def home(request):
    context = {'name': '张三', 'age': 25}
    return render(request, 'home.html', context)
3. redirect

redirect 函数用于重定向到其他 URL。可以传递一个 URL 字符串或视图函数名。

from django.shortcuts import redirect

def something(request):
    return redirect('https://www.baidu.com')

请求对象属性

pycharm社区版好像没有代码提示,可以用dir方法查看类和方法:
print([i for i in dir(request) if '__' not in i])

1. request.method

获取 HTTP 请求方法(GET, POST 等)。

print(request.method)  # 输出 'GET' 或 'POST'
2. request.GET

获取 GET 请求参数。

print(request.GET)  # 输出 QueryDict 对象
print(request.GET.get('key'))  # 获取指定键的值
3. request.POST

获取 POST 请求参数。

print(request.POST)  # 输出 QueryDict 对象
print(request.POST.get('key'))  # 获取指定键的值

Django ORM配置

在settings.py中添加以下内容,使用pymysql

import pymysql
pymysql.install_as_MySQLdb()

修改settings.py中的DATABASES

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_orm',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '10.89.0.2',
        'PORT': '3306'
    }
}

在models.py中添加类

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField(default=2)
    class Meta:
        db_table = 'user_info'
  
class Department(models.Model):
    title = models.CharField(max_length=16)
    class Meta:
        db_table = 'department'

执行命令:

python manage.py makemigrations
# 如果不起作用检查app1/migrations/__init__.py是否存在
python manage.py migrate

使用ORM操作数据库

在app1下新建文件insert_to_db.py

import django
import os
import sys

sys.path.append("/root/python/楚仪杯/django/test06/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test06.settings")
django.setup()

from app1.models import UserInfo
# 创建记录
# 1. 创建一条数据
UserInfo.objects.create(name='张三',password='123456',age=18)
# 2. 一次创建多个数据
UserInfo.objects.bulk_create(
	[
		UserInfo(name='李四',password='123456',age=18)
		UserInfo(name='王五',password='123456',age=18)
	]
)

# 获取数据
# 1.获取所有的数据
data_list = UserInfo.objects.all() # QuerySet类型
for obj in data_list:
	print(obj.id, obj.name, obj.password, obj.age)

# 2. 获取符合条件的数据
data_list = UserInfo.objects.filter(id=1)

# 删除数据
UserInfo.objects.filter(id=3).delete()
Department.objects.all().delete()

# 更新数据
UserInfo.objects.all().update(password=999)
UserInfo.objects.filter(id=2).update(age=123)
UserInfo.objects.filter(name="张三").update(age=18)

# 其他方法
# order_by排序
UserInfo.objects.order_by('id')
UserInfo.objects.order_by('-id') # 加负号表示降序

补充:

Django Q 查询

1. 核心功能

  • 实现 ORANDNOT 组合查询
  • 支持嵌套多层条件
  • 动态构建复杂查询逻辑

2. 基础用法

2.1 导入 Q 对象
from django.db.models import Q
2.2 基本查询
# OR 查询(标题包含"django" 或 内容包含"web")
Article.objects.filter(Q(title__icontains='django') | Q(content__icontains='web'))

# AND 查询(状态已发布且作者是张三)
Article.objects.filter(Q(status='published') & Q(author='张三'))

# NOT 查询(排除未发布文章)
Article.objects.filter(~Q(status='draft'))
2.3 多条件组合
# (标题含"Python" 或 内容含"编程") 且 阅读量>100 
query = (Q(title__icontains='Python') | Q(content__icontains='编程')) & Q(views__gt=100) Article.objects.filter(query)

常用查询类型:

查询类型作用示例
in匹配列表中的任意值id__in=[1, 3, 5]
contains包含字符串(区分大小写)content__contains=“error”
icontains包含字符串(不区分大小写)title__icontains=“web”
regex正则表达式匹配(区分大小写)title__regex=r’^A.*z$’
gt大于views__gt=100
gte大于等于price__gte=50
lt小于rating__lt=3.5
lte小于等于age__lte=30
range范围区间(闭区间)date__range=(“2023-01-01”, “2023-12-31”)
isnull字段是否为 NULLauthor__isnull=True
year匹配年份pub_date__year=2023
month匹配月份(1-12)pub_date__month=12
day匹配日期(1-31)pub_date__day=25
week周数(ISO 标准,1-53)pub_date__week=52
hour小时(0-23)timestamp__hour=15

Queryset 常用属性和方法

方法作用示例
distinct()去重(多用于跨表查询)Book.objects.filter(author__age__gt=30).distinct()
values()返回字典列表(指定字段)Book.objects.values(‘title’, ‘price’)
values_list()返回元组列表(flat=True 返回单个值列表)Book.objects.values_list(‘id’, flat=True)

_meta 获取字段名

方法/属性作用
_meta.get_fields()获取所有字段(包括关联字段和反向关联)
_meta.fields仅获取模型直接定义的数据库字段

**Django-Redis **

1. 安装配置

# 安装依赖
pip install django-redis redis

在settings.py中添加:

# Redis缓存配置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://10.89.0.2:6379/1", # 1号数据库
"TIMEOUT": 60*15 # 默认缓存时间(秒)
}
}

# 使用Redis存储会话
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

2. 基础用法

from django.core.cache import cache

# 设置缓存
cache.set('hot_news', news_list, timeout=3600) # 缓存1小时
cache.set_many({'key1': val1, 'key2': val2}) # 批量设置

# 获取缓存
data = cache.get('hot_news')
multi_data = cache.get_many(['key1', 'key2'])

# 删除缓存
cache.delete('expired_data')
cache.delete_many(['key1', 'key2'])
cache.clear() # 清空所有缓存

3. 视图缓存

from django.views.decorators.cache import cache_page

# 页面级别缓存(15分钟)
@cache_page(60 * 15)
def product_list(request):
# ...

# 带参数缓存(不同参数不同缓存)
@cache_page(60 * 5, key_prefix='product-detail')
def product_detail(request, product_id):
# ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值