Django学习笔记

本文详细介绍了Django项目的创建、配置、数据库操作、URL路由、视图函数、模板和静态文件管理,以及模型的ORM操作。涵盖了从启动项目到数据库交互,再到模板渲染和URL映射的全过程,适合初学者快速掌握Django开发流程。
摘要由CSDN通过智能技术生成

1.文件介绍

setting-配置文件
urls -URL和函数的对应关系
manage -管理项目文件(启动项目,创建app,数据管理)

2.创建app

语句:python manage.py startapp app01

文件介绍
admin.py-后台管理【不用】

migration.py-数据库变更【不用】

app.py-项目配置

tests.py-测试【不用】

models.py【重要】对数据库进行操作

views.py【重要】函数

3.注册app

在settings里面找到 INSTALLED_APPS
加入app名。如:‘app01’

4.编写urls和函数的对应关系

(1)找到主文件的urls.py,将urlpatterns里加入path
如:path(‘index/’, views.index),

(2)在上方导入app的views
如:from app01 import views

5.编写视图函数,app的views.py

在上面导入HttpResponse
然后编写函数
如:
def index(request):
return HttpResponse(“welcom!”)

6.启动django项目

(1)python manage.py runserver
(2)pycharm直接启动

7.导入模板文件(两种方法)

在app中进行模板配置

(1)在app中新建文件夹templates并标记,其中保存用到的模板文件
(2)在app内的views.py中编写函数
函数返回一个render(request,“模板文件.html”)
如:

def tem(request):
    return render(request,"tem.html")

在项目中进行模板配置

(1)在项目目录中创建templates文件夹并标记(右键选择**‘将目录标记为’**)

(2)在settings中进行注册

'DIRS': [os.path.join(BASE_DIR,"templates")],

8.模板和静态文件

将主文件settings中改为STATIC_URL = ‘/static/’
在app下创建static目录,用来保存静态文件
django推荐使用{% load static %}
链接的href使用href=“{% static ‘…’ %}”
图片的src使用src=“{% static ‘…’ %}”

9.连接数据库(mysql)

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

10.models 模型

使用ORM技术,对象关系映射,将业务进行了一个解耦合

​ -Object.save()

​ -Object.delete()

无需再重复写增删改查

1.数据库没有表,生成数据库中的表

(1)生成迁移

在models中定义一个模型,在终端中输入:

python manage.py makemigrations

(2)执行迁移

在终端中输入,此时才会真正在数据库中生成表:

python manage.py migrate

2.数据库已经建好了,想直接使用

连接数据库后,在终端输入:

python manage.py inspectdb

终端中会生成models代码,复制到models.py中即可

11.对数据库中表的操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Shb3rMX1-1654590240681)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220606162545654.png)]

!!!对对象的操作一定一定要用object!!!

def addstudents(request):
    
    student = Studentinformation()
    student.wbh= '123456%d' % random.randint(0,100)
    student.sname='kovio%d' % random.randint(0,100)
    student.save()
    return HttpResponse("加入成功!%s,%s"%(student.wbh,student.sname))

可以在models中定义类方法实现添加操作!!!

# models
@classmethod
    def create(cls,sname,wbh='123123'):
        return cls(sname=sname,wbh=wbh)
 #addstudent  
 student = Studentinformation.objects.create(sname='cj')  #注意是对objects进行操作!!!
 student.save()

删(通过object找到后删除)

def delete_students(request):
    students = Studentinformation.objects.get(sname='kovio17')
    students.delete()
    return HttpResponse('delete already!')

改(通过object找到后修改)

def update_students(request):
    students = Studentinformation.objects.get(wbh=123456)
    students.sname='Luci'
    students.save()
    return HttpResponse('ok!')

查(可以通过object,get和filter/exclude过滤)

def getstudents(request):
    students=Studentinformation.objects.filter(sname='kovio5')	#只剩下sname='kovio5'
	students=Studentinformation.objects.get(sname='kovio5') 	#只找sname='kovio5'
    students=Studentinformation.objects.exclude(sname='kovio5') #除了sname='kovio5'的都留下
    students = Studentinformation.objects.all().order_by('wbh')	#按wbh排序
    
    context={
        "students":students
    }
    return render(request,'index.html',context=context)
 students_values = Studentinformation.objects.values()	#将数据返回成类似json格式
 print(students_values)

get获取单个对象时要注意

1.找不到要查找的值,会报异常,DoesNotExist

2.表中有多个相等的值,会报异常,MultipulObjectReturned

用查找方法写登录逻辑

def get_user(request):
    sname = "cj"
    wbh='123123'

    users = Studentinformation.objects.filter(sname = sname)
    print(users.count())	#玄学,不加这一句会卡住,不会报登录是否成功
    if users.count():
        user = users.first()
        if user.wbh == wbh:
            print('成功登录')
        else:
            print('wbh错误')
    else:
        print('无此用户')
    return HttpResponse('get!')

对结果集QuerrySet进行切片操作,相当在数据库里面的limit

在分页显示等场景很好用

  • 和python里面的切片不太一样,下标不能为负

  • QuerySet[5:15]获取第五条数据到第十四条数据

    相当于SQL中limit和offset

查询条件

  • 属性_运算符=值
  • gt
  • lt
  • gte
  • lte
  • in在某一集合中
  • contains类似于模糊查询like
  • startswith 以x×开始本质也是liKe
  • endswith 以xx结束也是like
  • exact
  • 前面同时添加i , ignore忽略
    • iexact
    • icontains
    • istartswith
    • iendswith

一对多关系

一个班级有多个学生,一个学生属于一个班级。

查找学生是哪个班级:

student = Student.objects.get(class=***)
class = students.class

查找某个班级有哪些学生:

class = Class.objects.get(class=***)
students = class.student_set.all()

student_set获取的是一个集合,正常来说应该在数据库里面

select * from studnts where class = ***

但是在这里直接通过class本身找到了所有包含此班级的学生。

12.配置路由url

url是Django 1.x中的写法,在Django2.1中,开始舍弃Django1.x中的url写法。

在Django2.x中,描写url配置的有两个函数path和re_path

re_path()函数可以看做是django 1.x中得url函数,即可以在路径中使用正则。

新版本路由配置规则

总路由

from django.conf.urls import url, include
from django.urls import path, re_path
from login import views

urlpatterns = [
    url(r'^login/', include("login.urls")),#总路由包含分路由
    path(r'^enroll/', views.enroll),#或者直接连接分路由
    # re_path(r'^$',views.login),
]
# urlpatterns是一个列表!!

分路由

from django.conf.urls import url
from login import views

urlpatterns=[
    url('index/', views.login),
    url('addstudent/',views.addstudents),
    url('getstudent/',views.getstudents),
    url('update_student/',views.update_students),
]

路由结构:总路由+分路由

13.(高级)对model中的表编写类方法实现数据的增删改查

方法

·对象方法

可以调用对象的属性,也可以调用类的属性

·类方法

不能调用对象属性,只能调用类属性

·静态方法

啥都不能调用,不能获取对象属性,也不能获取类属性。只是寄生在我们这个类上而已

快捷键

-control + P 参数提示

-shift + f6 重命名,重构

-alt + enter 自动导包

状态码

  • 2xx

    请求成功

  • 3xx

    转发或重定向

  • 4xx

    客户端错误

  • 5xx

    1.服务器错了

    2.后端开发人员的锅

13.(高级)对model中的表编写类方法实现数据的增删改查

方法

·对象方法

可以调用对象的属性,也可以调用类的属性

·类方法

不能调用对象属性,只能调用类属性

·静态方法

啥都不能调用,不能获取对象属性,也不能获取类属性。只是寄生在我们这个类上而已

快捷键

-control + P 参数提示

-shift + f6 重命名,重构

-alt + enter 自动导包

状态码

  • 2xx

    请求成功

  • 3xx

    转发或重定向

  • 4xx

    客户端错误

  • 5xx

    1.服务器错了

    2.后端开发人员的锅

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值