django二

Django 模型

Django ORM

settings.py 文件中找到 DATABASES 配置项

DATABASES = { 
  'default':
  {
      'ENGINE': 'django.db.backends.mysql',   # 数据库引擎
      'NAME': 'runoob', # 数据库名称
      'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
      'PORT': 3306, # 端口
      'USER': 'root', # 数据库用户名
      'PASSWORD': '123456', # 数据库密码
  }  
}

告诉 Django 使用 pymysql 模块连接 mysql 数据库:

 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()

 

定义模型

创建 APP

Django 规定,如果要使用模型,必须要创建一个 app。我们使用以下命令创建一个 TestModel 的 app:

django-admin startapp TestModel

TestModel/models.py 定义model

# models.py
from django.db import models

class Test(models.Model):
  name = models.CharField(max_length=20)
  class Meta: # 定义一些元素据,比如表名等
    db_table = 'users'

以上的类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。

接下来在 settings.py 中找到INSTALLED_APPS这一项 TestModel

HelloWorld 目录中添加 testdb.py 文件(下面介绍),并修改 urls.py

# HelloWorld/HelloWorld/testdb.py: 文件代码:

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from TestModel.models import Test

# 数据库操作
def testdb(request):
  test1 = Test(name='runoob')
  test1.save()
  return HttpResponse("<p>数据添加成功!</p>")

 

# HelloWorld/HelloWorld/urls.py: 文件代码:

from django.urls import path

from . import views,testdb

urlpatterns = [
  path('runoob/', views.runoob),
  path('testdb/', testdb.testdb),
]

获取数据

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from TestModel.models import Test

# 数据库操作
def testdb(request):
  # 初始化
  response = ""
  response1 = ""
   
   
  # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
  listTest = Test.objects.all()
       
  # filter相当于SQL中的WHERE,可设置条件过滤结果
  response2 = Test.objects.filter(id=1)
   
  # 获取单个对象
  response3 = Test.objects.get(id=1)
   
  # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
  Test.objects.order_by('name')[0:2]
   
  #数据排序
  Test.objects.order_by("id")
   
  # 上面的方法可以连锁使用
  Test.objects.filter(name="runoob").order_by("id")
   
  # 输出所有数据
  for var in listTest:
      response1 += var.name + " "
  response = response1
  return HttpResponse("<p>" + response + "</p>")

表单

https://www.runoob.com/django/django-form.html

 

视图

Request 对象

每个视图函数的第一个参数是一个 HttpRequest 对象,HttpRequest对象包含当前请求URL的一些信息:

path,method,GET(包含所有HTTP GET参数的类字典对象),POST(包含所有HTTP POST参数的类字典对象)...

QueryDict对象

在HttpRequest对象中, GET和POST属性是django.http.QueryDict类的实例。

QueryDict类似字典的自定义类,用来处理单键对应多值的情况。

QueryDict实现所有标准的词典方法。还包括一些特有的方法

def runoob(request):
  name = request.GET.get("name")
  return HttpResponse('姓名:{}'.format(name))
   
def runoob(request):
  name = request.POST.get("name")
  return HttpResponse('姓名:{}'.format(name))

响应对象:HttpResponse 对象

响应对象主要有三种形式:HttpResponse()、render()、redirect()。

HttpResponse(): 返回文本,参数为字符串,字符串中写文本内容。如果参数为字符串里含有 html 标签,也可以渲染

render(): 返回文本,第一个参数为 request,第二个参数为字符串(页面名称),第三个参数为字典(可选参数,向页面传递的参数:键为页面参数名,值为views参数名)

redirect():重定向,跳转新页面。参数为字符串,字符串中填写页面路径。一般用于 form 表单提交后,跳转到新页面。

提示CSRF报错

注释 settings.py中 'django.middleware.csrf.CsrfViewMiddleware',

路由

Django 路由在 urls.py 配置,urls.py 中的每一条配置对应相应的处理方法。

  • path:用于普通路径,不需要自己手动添加正则首位限制符号,底层已经添加。

  • re_path:用于正则路径,需要自己手动添加正则首位限制符号。

from django.urls import re_path # 用re_path 需要引入 
urlpatterns = [
  path('admin/', admin.site.urls),
  path('index/', views.index), # 普通路径
  re_path(r'^articles/([0-9]{4})/$', views.articles), # 正则路径
]

https://www.runoob.com/django/django-routers.html

Django Admin 管理工具

Django 提供了基于 web 的管理工具。

Django 自动管理工具是 django.contrib 的一部分。你可以在项目的 settings.py 中的 INSTALLED_APPS 看到它:

INSTALLED_APPS = (
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
)

https://www.runoob.com/django/django-admin-manage-tool.html

posted @ 2024-08-20 20:04  hjy1995  阅读(4)  评论(0编辑  收藏  举报