Django微讲解(二)
Django小白必回三板斧,request对象方法,Django链接数据库,ORM操作
Django微讲解(二)
Django小白必回三板斧
与浏览器打交道的视图函数都应该有返回值,常见的就是'HttpResponse','render','redirect',而且Django自 带重启功能,当识别到项目中的代码有变化之后,隔断时间就会自动重启,但是有时候较慢。 # 1.HttpResponse 主要用于返回字符串类型的数据 def test(request): return HttpResponse('HttpResponse主要用于返回字符串类型的数据') # 2.reder 主要用于返回HTML文件,支持模板语法,这个模板语法是Django自己写的 def test(request): return render(request,'test.html',{'name': 'oscar'}) # 3.redirect 主要用于重定向,括号内可以写其它网站的全称,也可以是自己网站的后缀 def test(request): return redirect('/index/') def index(request): return HttpResponse('跳转到了这里')
登录功能
我们之所以可以在浏览器地址中输入不同的路由访问到不同资源,是因为我们在后端框架中提前开设了相应的访问接 口。所以用户才能访问,言外之意就是我们没有接口的话,就不会访问到。 # 1.静态文件 登录界面需要使用bootstrap,并且还需要自己编写css和js,象这些编写完成后不会经常被修改的与html页面相关 的文件,比如css文件、js文件、图片文件、第三方框架文件等等,都可以称之为是'静态文件',在Django中静态文件需要单 独开设一个文件夹存储,默认叫'static'文件夹,在该文件夹内还可以根据功能的不同继续划分不同的文件,比如css文件夹、 js文件夹等等。 # 2.页面需要获取前端数据并且传递给后端 我们可以使用from表单,里面有两个参数,'action'控制数据的提交地址,'method'控制请求的提交地址 # 3.静态文件资源访问接口固定配置 理论上我们应该去路由层开设接口的,如果没有开设静态资源访问接口,我们就访问不到静态文件的资源,当然也不 能使用,所以我们应该去开设接口资源,但是由于静态文件资源使用频率很高,只要是一个web项目都肯定需要,所以Django 为了避免开发者繁琐,提供了静态资源的配置文件,只需要填写固定的配置即可开设资源接口。 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ] # 4.配置文件中的两点疑惑 STATIC_URL = '/static/' # 作用是什么 STATICFILES_DIRS = [] # 列表是用来存储多个元素的,这里为什么是列表 以改地址为例:/static/bootstrap-3.4.1-dist/css/bootstrap.min.css /static/是接口前缀,表示具备访问静态文件资源的权限,具备了权限之后会拿着接口前缀后面的文件路径去列表 中的每个文件夹中查找,并且找到一个就结束 # 5.接口前缀动态绑定 如果templates中有很多HTML文件,并且都需要引入静态资源,所以我们就把接口前缀设置成动态绑定的 {% load static %} <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
request对象方法
我们写的这一个登录功能,当我们点击提交按钮的时候,就会变成post请求,默认会报403,我们只需要在配置文件 中注释一行代码即可 MIDDLEWARE = [ # 'django.middleware.csrf.CsrfViewMiddleware', ] # 1.针对不同的请求执行不同的代码 我们在执行get请求的时候应该返回一个登录页面,post请求的时候校验用户数据,所以我们就要先获取当前的请 求方式 request.method方法,会返回纯大写的请求方式字符串,所以我们就可以利用这个方法做一些判断 def login(request): if request.method == 'GET': return render(request,'login.html') elif request.method == 'POST': return HttpResponse('数据提交成功') # 2.获取post请求提交的普通数据 request.POST方法,返回的结果一个QueryDict,可以看成字典处理,可以使用get方法拿到数据,但是get方法 拿到的是值列表中的最后一个元素,而不是整个列表,想要拿到整个值列表我们可以使用getlist方法。 <QueryDict: {'username': ['oscar'], 'password': ['123'], 'hobby': ['111', '222', '333']}> # 3.获取url后面携带的数据 request.GET方法,返回的结果一个QueryDict,可以看成字典处理,可以使用get方法拿到数据,但是get方法拿 到的是值列表中的最后一个元素,而不是整个列表,想要拿到整个值列表我们可以使用getlist方法。
pycharm链接MySQL
pycharm可以充当很多数据库软件的客户端,在pycharm的右上方侧边,或者左下方侧边后一个'database',如果 上述两个地方都没有,就需要下载插件,或者重新安装pycharm。 # 链接数据库 1.选择数据库 2.首次链接需要下载驱动 download driver... # 点击download即可 3.测试链接如果不通过,就需要换驱动重新下载使用
Django链接数据库
Django虽然自带了一个sqlite3数据库,但是功能很少,仅用于本地测试 # 1. Django链接数据库的默认配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } # 2.修改配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'jp03', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': 'root', } } # 3.指定模块 在项目同名的文件夹内的__init__.py或者应用名的文件夹内的__init__.py添加一行固定的代码 import pymysql pymysql.install_as_MySQLdb()
Django orm简介
ORM:对象关系映射 # 1.ORM特点 能够让不会写SQL的python程序员使用python语法就可以直接操作数据库,虽然提升了开放效率,但是由于是封装 的SQL语句,需要人为编写SQL调优,有时候可能效率不高 # 2.概念 表:就相当于类 一行行数据:类产生的一个个对象 数据字段:对象的一个个属性
ORM基本操作
如果需要使用ORM,需要去应用下的models.py中编写代码 # 1.编写类代码 class Users(models.Model): id = models.AutoField(primary_key=True) # 等价于:id int primary key auto_increment name = models.CharField(max_length=255) # 等价于:name char(255) password = models.IntegerField() # 等价于:password int # 2.执行数据库迁移命令 python1 manage.py makemigrations # 记录操作 python1 manage.py migrate # 将操作迁移到数据库 ''' 注意:这里的python1是你当前pycharm使用的解释器版本,我们之前讲过多版本共存问题,不同的版本我们设置了不同的名 字,这里要注意一下,不然可能会报错。 首次执行迁移命令,Django还会自动创建一些默认需要使用的表 ''' # 3.表名的特征 由于Django支持多个应用,为了区分不同应用下可能会出现相同的表明,所以自动加上了应用的前缀 # 4.扩展 1.表的主键可以不写,ORM会自动帮你写一个名为id的主键 2.每次修改了跟数据库相关的python代码,都需要重新执行迁移命令
数据操作
# 1.增 def db_data(request): from app01 import models res=models.Users.objects.create(name='jason',password=123) print(res) # Users object print(res.id) # 2 print(res.name) # jason print(res.password) # 123 # 2.查 def db_data(request): from app01 import models res = models.Users.objects.filter(name='oscar') print(res) # <QuerySet [<Users: Users object>]> print(res[0]) # Users object print(res[0].id) # 1 print(res[0].name) # oscar print(res[0].password) # 123 # 3.改 def db_data(request): from app01 import models models.Users.objects.filter(id = 1).update(name = 'oscae18') # 4.删 def db_data(request): from app01 import models models.Users.objects.filter(id=2).delete() return HttpResponse('添加成功')
这里是IT小白陆禄绯,欢迎各位大佬的指点!!!
__EOF__
本文作者:陆禄绯
本文链接:https://www.cnblogs.com/pyqsy/p/16260511.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/pyqsy/p/16260511.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix