Django微讲解(二)

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 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   陆禄绯  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示