DJANGO增删改查

本文详细介绍了Django Web框架的工作流程,包括用户请求、URL映射、视图处理、模板渲染以及数据库交互。通过实例展示了如何创建app、编写urls、视图函数、模板以及实现登录功能。同时,讲解了数据库的配置、ORM操作,如增删改查,并提供了相关代码示例。
摘要由CSDN通过智能技术生成

https://www.cnblogs.com/yuanlianghong/p/10987877.html

@一、Django的工作流
1:用户通过浏览器输入相应的 URL 发起 HTTP 请求(一般是 GET/POST)

2:Django 接受到请求,检测 urls.py 文件,找到和用户输入的 URL 相匹配的项,并调用该 URL 对应的视图函数(view),例如,通常来说 urls.py 文件里的代码是这样的:

url(r’^homepage/$', views.home_page)
则当用户输入的 URL 为 www.某个网址.com/homepage 时,django 检测到该 URL 与上面的代码 匹配,于是调用后面的 views.home_page 视图函数,把相应的请求交给该视图函数处理。

3:视图函数被调用后,可能会访问数据库(Model)去查询用户想要请求的数据,并加载模板文件(Template),渲染完数据后打包成 HttpResponse 返回给浏览器(Http协议)

二、准备工作
大致工作流程就是这样,从流程可以看出,我们需要做的就是:

#准备工作,创建app
python3 manage.py startapp app01
#在配置文件(settings–>INSTALLED_APPS)中添加
INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘app01.apps.App01Config’, #或者app01
]
复制代码
三、编写url、Http请求的视图(view)函数
复制代码
#1、编写相应的 url(urls文件中)
from app01 import views
urlpatterns = [
url(r’^admin/‘, admin.site.urls),
url(r’^login/', views.login),
]

#2、编写处理 Http 请求的视图函数(View)
def login(request):
pass #功能代码块,暂用pass填充
复制代码
四、搭建需要渲染的模板(template)
复制代码
#3、编写需要渲染的模板(template)

#3.1通常建立static文件夹放入静态文件(bootstrap,js,css,image),然后在settings中配置路径
STATIC_URL = ‘/static/’ #接口前缀,和静态文件夹static无关
STATICFILES_DIRS = [
os.path.join(BASE_DIR,‘static’) #静态文件夹路径
]

#3.2登录Html文件搭建

登录页面

#提交数据到后台使用form表单,action指定提交地址(3种方式) #1.全路径 #2.只写路径后缀 #3.不写,默认当前路径(http://127.0.0.1:8080/login/)提交

username:

password:

#提交数据方式: 或
复制代码 五、具体视图函数功能实现 5.1登录视图测试 复制代码 #4.1根据用户请求类型,执行对应功能 ''' 由于form表单提交数据默认get请求,实际提交数据是POST请求,需要修改客户端的请求类型(获取客户端请求类型:request.method)。 通过直接修改会报错(403),还需注释settings中 MIDDLEWARE 的'django.middleware.csrf.CsrfViewMiddleware', ''' def login(request): if request.method =='POST': return HttpResponse('OK') return render(request,'login.html')

#4.2获取用户数据(GET/POST请求获取方式一致)
‘’’
尝试打印 print(request.POST),可将其看做字典存放了post提交的数据。
字典中的value是列表结构,但取值时拿到的是单个元素;
获取列表元素:
request.POST.get(‘username’);默认获取列表最后一个元素。
        request.POST[‘username’];不推荐使用(键不存在直接报错)

 若字典中value有多个元素可使用(用户爱好,多选框):
         request.POST.getlist('username');  

‘’’
def login(request):
if request.method ==‘POST’:
print(request.POST) #可将其看做字典,存放了post提交的所有数据

    #获取列表数据,使用的username是根据前端<input...name="username"> name属性
    print(request.POST.get('username'))  
    print(request.POST['username']
          
    print(request.POST.getlist('username')  #获取列表中所有数据
    return HttpResponse('OK')
          
return render(request,'login.html')

复制代码
5.2数据库的连接和配置
复制代码
#4.3连接数据库
‘’’
使用PyCharm连接数据库:
DataBase–>DataSource–>下载驱动–>配置参数–>Test Connection

Django连接数据库配置(settings文件):
1.修改配置 DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘day55’,
‘HOST’: ‘127.0.0.1’,
‘PORT’: 3306,
‘USER’: ‘root’,
‘PASSWORD’: ‘51cwdqgcs’,}}
2.用pymysql替换默认的mysql_db模块连接数据库
在项目文件夹或应用文件下__init__.py写入
import pymysql
pymysql.install_as_MySQLdb()
‘’’
复制代码
5.3 Django的ORM
复制代码
class User(models.Model): #在app01–>models中创建类继承 models.Model
id = models.AutoField(primary_key=True) #添加相应字段
name = models.CharField(max_length=32) #CharField定义时必须指定max_length参数
password = models.CharField(max_length=32)
再执行数据库迁移命令
‘’’
1.django的ORM不能自动创建库(手动创建数据库),但可以自动创建表。
2.
python3 manage.py makemigrations 将数据库变动记录到migrations文件夹下
python3 manage.py migrate 将数据库变动同步到数据库
‘’’
复制代码
5.4通过ORM实现数据库的增、删、改、查

复制代码
#4.5通过测试Djang的ORM(增、删、改、查)
#增
def reg(request):
if request.method==‘POST’:
username = request.POST.get(‘username’)
password = request.POST.get(‘password’)
#操作数据库user表插入数据
#方法一
#user_obj=models.User.objects.create(name=username,password=password)
#方法二
user_obj=models.User(name=username,password=password)
user_obj.save()
# print(user_obj)
# print(user_obj.name)
# print(user_obj.password)
return HttpResponse(‘注册成功’)
return render(request,‘reg.html’)

#增(完善):在数据展示页面增加‘添加’数据按钮
#href属性指定跳转的页面(注册)
添加数据
#完成添加数据后,点击按钮重定向’数据展示’页面
return redirect(‘/userlist/’)
复制代码

复制代码
#查
def userlist(request):
user_list=models.User.objects.all() #获取所有数据
#user_list是QuerySst对象,点query获取当前对象内部sql语句
print(user_list.query)
#循环打印用户信息,放入html
#for user_obj in user_list:
#print(user_obj.password,user_obj.name)
return render(request,‘userlist.html’,locals())
复制代码

复制代码
#定义修改视图函数
def edit(request):
if request.method == ‘POST’:
print(request.POST)
print(request.GET)
username = request.POST.get(‘username’)
password = request.POST.get(‘password’)
# 获取编辑对象的id方式
edit_id = request.POST.get(‘edit_id’)
# 更新数据库
models.User.objects.filter(id=edit_id).update
(name=username,password=password)
#重定向’数据展示’ 页面
return redirect(‘/userlist’)
# 获取用户想要修改的数据的id
edit_id = request.GET.get(‘edit_id’)
# 将该数据查询出来渲染到一个编辑页面
# 查询数据方式1
user_obj = models.User.objects.filter(id=edit_id).first()
# 查询数据方式2
# # user_obj = models.User.objects.get(id=edit_id)
# print(user_obj,type(user_obj))
# 将当前数据渲染到一个编辑页面上
return render(request,‘edit.html’,locals())
复制代码

复制代码
#删除
#在数据展示页面增加‘删除’数据按钮,在指定跳转路径后拼接用户ID(GET请求可以携带的参数就是在路径后拼接)
删除
#定义删除视图函数
def delete_user(request):
delete_id=request.GET.get(‘delete_id’)
# res_1 = models.User.objects.filter(id=delete_id)
# print(res_1) # QuerySet对象 <QuerySet [User:jason]>

#QuerySet对象索引取值获取数据对象
# res = models.User.objects.filter(id=delete_id)[0]
# res=models.User.objects.filter(id=delete_id).first()
# print(res)  #数据对象,才能res.id取值

#删除queryset内所有数据对象
res = models.User.objects.filter(id=delete_id).delete()
return redirect('/userlist/')

复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值