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

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值