Django基础知识

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

由于最近要学习Django框架,并且最近一段时间内都会用到它。
就决定做个学习记录吧
个人记录,理解有限,不足之处还请包含和指出。

一、Django介绍

Django用于python的web项目搭建,MTV设计模式
Model: 模型层,负责与数据库交互
Template: 模板层,也就是所谓的前端,负责把页面展示给用户,里面主要存放HTML文件
View:视图层,负责业务逻辑,在适当的时候调用Model和Template两层。

常用命令:
python manage.py startapp XXXX 建立应用XXXX
python manage.py makemigrations 记录models.py的所有改动,并且将这个改动迁移到migrations这个文件下生成一个文件例如:0001文件
python manage.py migrate 主要作用就是把对models的改动作用到数据库,也就是执行migrations里面新改动的迁移文件更新数据库
python manage.py runserver 运行

二、Django框架搭建

1.安装Dajngo

在pycharm的终端输入命令pip install django
然后输入命令python -m django --version查看版本

2.创建项目

django项目创建有两个方法:
1.在对应文件夹下进入cmd
输入django-admin startproject XXXX(XXXX为对应项目名)
2.用pycharm直接创建

三、结构介绍

1、初始文件介绍

初始界面为一个和项目名字相同的包
包内有四个文件夹
settings.py内是基础的配置信息,
在DATABASES中有配置数据库信息,默认配置sqllite数据库;
在ALLOWED_HOSTS中可以添加想增加的host

url.py中存的是页面地址配置信息

在这里插入图片描述

2、运行

在终端输入python manage.py runserver运行Dajngo服务器
一般默认地址是127.0.0.1(有时需要在host中添加)

四、Url

4.1使用介绍

Django的页面配置是在主文件中的urls.py中的urlpatterns下配置,通过添加path(),来添加页面,例如 path(‘sales/orders/’, listener), listener是该对应url的处理函数,不能带(),因为不需要获得它的值

当需要配置的url过多时,可通过以下几种方法简化:
1.使用include()函数
在其他包内建立子url配置文件,通过include指定
例如:path('sales/', include('sales.urls')),
子url配置文件格式与主文件相同

urlpatterns = [
	    path('orders/', views.listorders),
	]

2.使用转换器:<转换器类型:自定义名>,例如 path('orders/<int:page>', views.listorders),
输入orders/100后,会自动跳转到处理函数,同时处理函数定义的page值接受100
3.re_path(),可使用正则表达式配置(比较麻烦)

4.2反向解析

url 反向解析是指在视图或模板中,用path定义的名称来动态查找或计算出响应的路由
例如:path(route, views, name=“XXXX”)
然后在模板中反向解析

{% url ‘XXXX’ %}
{% url ‘XXXX’ ‘value1’ ‘value2’%}
例如
{% url ‘student’ age=‘18’ name=‘zhangsan’ %}

五、View

前端的数据经过url文件的转发后,传到view的文件中,该文件主要包含的处理函数,用来处理数据

def listener(request):
    
    return HttpResponse("hello world")   

request中存放的是前端传来的数据
数据类型主要分为GET和POST类型(和其他类型,目前没学到)
GET请求类型主要有:
1.浏览器地址后的值,例如:localhost:8000/xxxx/?username=1
2.form表单
POST请求类型主要有"
1.大量数据、隐私数据
2.form表单
最好通过request.GET.get(“c”,None)方法获取值,字典类型,若值为空,取None

POST请求中包含csrf验证,该验证是防止不合法的输入,初学时可以先解除
通过Setting.py中的配置信息 注解了就行了
MIDDLEWARE = [
*
*
    'django.middleware.csrf.CsrfViewMiddleware',
    *
    *
]

HttpResponse(响应体(回传内容),响应体数据类型(默认是text/html),status状态码(200.404之类的。默认200(ok)))回传想在页面上显示的数据,响应体中可以是String字符串,也可以是界面

六、template

模型层主要存放html页面,template需要配置:

1.配置

1.先建好一个包template
2.在Setting.py文件中配置路径

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        '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',
            ],
        },
    },
]

一般都是默认的,只有‘DIRS’中需要写好template包的路径
3.在template中创建HTML文件
4.在view中配置:
一般使用render:

from django.shortcuts import render



def test_templates(request):
	dir={1:1,2:2}

    return render(request,'test_tes.html',dir)

函数render(request,html页面,字典),可用于让前端获得字典值,通过{{ dir.key }}获取,可以使用locals()方法实现对该函数的所有属性实现自动封装。

2.使用

html页面有以下使用方法:

1.逻辑判断

<% if x==1 %> 
命令
<% endif %>

2.过滤器
{{参数|lower}}

lower 字符串转为小写
upper 字符串大写
safe 不转义
add:‘n’ 将value值增加n

3.继承父页面
继承:
{% extends “XXX.html” %}
重写:
夫模块中要先定义可修改的block
{% block XXXX %}
子模块覆盖父模块中的XXX的内容
{% endblock XXXX %}

3、静态资源文件配置

在setting.py里配置路径

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

然后通过{% static %}标签访问
1.加载static {%load static %}
2.使用静态资源{% static ‘url’ %}

<img src="{% static 'image/le.jpg'%}">

七、model

1、配置

sqllite数据库不多赘述,主要介绍mysql的配置
1.找到Setting文件,配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',		# 要连接的数据库ip
        'PORT': '3306',				# 数据库连接端口,一般默认为3306
        'NAME': 'XXXX',			# 已经存在的数据库名称
        'USER': 'root',				# 用户名
        'PASSWORD': 'XXXX',				# 用户密码
}

2.找到__init__.py文件,配置

import pymysql
pymysql.install_as_MySQLdb()

3.登记模块
在setting文件中登记:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'demo'#自己新建的模块
]

2、建立映射

2.1、django建立数据库表

在models.py文件中创建类,该类继承models.Models的父类,类名与数据库表名对应,思想类似于面向对象。

参数定义参照下面方法:

class Student(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=45, blank=True, null=True)
    age = models.IntegerField(blank=True, null=True)
    grade = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'student'

Meta的内部类是用于自命名数据库表,Django默认建表格式:模块名_类名
然后执行python manage.py makemigrations XXXX
python manage.py migrate
注意:此方法会把Django中默认的自带的表也导入数据库

2.2、数据库表导入Django

一般情况下我们已经建好了数据库表
这时只需使用以下方法自动导入
python manage.py inspectdb (表名)> app名/models.py

3、使用

在view里调用该类的objects获取对象

sql=Student.objects.all()`

方法介绍
1.增
1.1、使用.objects.create()

Student.objects.create(id=,name='abc',age=1,grade=250

1.2、使用save()

2.查

all() 查询所有,返回QuerySet(结构是元组里存放字典)
get() 单一
filter() 查询符合的多条记录
exclude() 除了条件的多条记录
values(‘XXXX’,“XXXX”) 等同于 select A,B from 表

__exact:等值匹配

XX.objects.filter(id__exact=1)#select * from XX where id=1

__contains:包含特定值 模糊查询
__startwith:以XXX开始
__endwith:以XXX结束

XX.objects.filter(name__contains="w")#select * from XX where name like'%w%'

__gt(e):大于(等于)特定值、__lt:小于于特定值

XX.objects.filter(id__gt=1)#select * from XX where id>1

3、改
单值修改:
首先用get()获得值,然后修改

	
student=Student.objects.get(id=1)
student.update(grade=250)

多值修改:

students=Student.objects.all()
students.update(age=18)#都设成18

4.删
同修改一样 .delete()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340