一、静态文件配置

静态文件配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
# 暴露给外界能够访问服务器静态文件夹下面所有的资源 STATIC_URL = '/xxx/' # 接口前缀 跟你的静态文件夹的名字一点关系都没有
# 默认情况下这个前缀跟静态文件夹名字一样!!!
# 静态文件配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'), # 就是你的静态文件夹路径
os.path.join(BASE_DIR,'static1'),
os.path.join(BASE_DIR,'static2')
]
# ps:会依次查找列表中所有的静态文件路径 找到的话立刻停止,都没有找到返回404

二、form用get和post提交数据

1、form提交数据的地址指定的三种方式

action属性控制提交的地址
方式:
1.全路径
<form action="http://127.0.0.1:8000/login/">
2.只写路径后缀
<form action="/login/">
3.不写 (默认往当前路径提交)
form表单默认是get请求

2、post与get执行代码块

def login(request):
if request.method == 'POST':
return HttpResponse('OK')
return render(request,'login.html')
def login(request):
# 获取用户端提交的请求方式
print(request.method) # 拿到的请求方式是全大写的字符串
if request.method == 'POST':
print(request.POST) # 你就把它当成一个大字典里面存放了客户端post提交的所有的数据
# request.POST:< QueryDict: {'username': ['jason'], 'password': ['123']} >
print(request.POST.get('username')) # value虽然是个列表但是获取value的时候拿到却是单个元素
# 默认只会取value列表里面的最后一个元素
# request.POST:<QueryDict: {'username': ['jason', 'egon'], 'password': ['123']}>
print(request.POST.getlist('username')) # 要想一次性获取value列表里面所有的数据需要用getlist()
# ['jason', 'egon']
print(request.POST['password']) # 不推荐使用该方法获取数据
return HttpResponse('OK')
return render(request,'login.html') # 获取value列表里面所有的元素需要使用getlist 应用场景:用户的爱好 多选框
# get只会获取到value列表的最后一个元素 # 获取get请求数据的方式跟post请求完全一样
print(request.GET) # <QueryDict: {'username': ['jason'], 'password': ['123']}>
request.GET.get('user')
# <QueryDict: {'username': ['jason','egon'], 'password': ['123']}>
request.GET.getlist('username')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
<script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script> </head>
<body> <div class="container">
<div class="row">
<h1>登录页面</h1>
<div class="col-md-6 col-md-offset-3">
<form action="" method="post">
<p>username:<input type="text" class="form-control" name="username"></p>
<p>password:<input type="password" class="form-control" name="password"></p>
<input type="submit" class="btn btn-primary">
</form>
</div>
</div>
</div> </body>
</html>

login.html

三、django连接数据库

    1.需要修改settings配置文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day54',
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':''
}
}
ps:键必须都是大写 2.告诉django用pymysql替换它默认mysqldb模块连接数据库
方式1:在你的项目文件夹下面的__init__.py 默认在此init里写
方式2:也可以在你的应用文件夹下面的__init__.py # 固定写法
import pymysql
pymysql.install_as_MySQLdb() # 告诉django用pymysql代替mysqldb连接数据库

四、ORM

什么是ORM:
对象关系映射
类 >>> 表
对象 >>> 表记录
对象的属性 >>> 一条记录某个字段对应的值 django的orm不能够自动帮你创建库,但是可以自动帮你创建表,所以需要自己手动创建库
提示:一个django项目就使用一个库,不要多个django项目使用一个库

五、数据库迁移命令

1、方式一:pycharm命令行

python3 manage.py makemigrations  # 将你的数据库变动记录到一个小本本上(并不会帮你创建表)
python3 manage.py migrate # 将你的数据库变动正在同步到数据库中

2、方式二:快捷键Tools

Tools --->>> Run manage.py Task

        makemigrations
migrate

六、ORM操作数据库

1、新增数据

# 方式1:
user_obj = models.User.objects.create(name=username,password=password)
# 方式2:
user_obj = models.User(name=username,password=password)
user_obj.save() # 对象调用save方法保存到数据库
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() # 对象调用save方法保存到数据库 print(user_obj)
print(user_obj.pk) # 获取主键字段对应的值,无论你的主键叫什么名字
print(user_obj.name) # 获取用户数据的name值
print(user_obj.password) # 获取用户数据的password值 return HttpResponse('注册成功')
return render(request, 'reg.html')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
<script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script> </head>
<body> <div class="container">
<div class="row">
<h1>注册页面</h1>
<div class="col-md-8 col-md-offset-2">
<form action="" method="post">
<p>username:<input type="text" name="username" class="form-control"></p>
<p>password<input type="password" name="password" class="form-control"></p>
<input type="submit" class="btn btn-primary">
</form>
</div>
</div>
</div> </body>
</html>

reg.html

2、查询数据

user_list = models.User.objects.all()  # 获取user表所有的数据
# 只要是QuerySet就可以点query查看获取到当前QuerySet对象的内部sql语句
print(user_list.query)
def userlist(request):
# 获取数据库数据
user_list = models.User.objects.all() # 获取user表中所有的数据 select * from user
  return render(request, 'userlist.html', locals())
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
<script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script> </head>
<body> <div class="container">
<div class="row">
<h1>展示数据</h1>
<div class="col-md-8 col-md-offset-2">
<a href="/reg/" class="btn btn-success">添加数据</a>
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>password</th>
<th>action</th>
</tr>
</thead>
<tbody>
{% for user_obj in user_list %} {# user_list = [obj1,obj2,obj3] #}
<tr>
<td>{{ user_obj.pk }}</td>
<td>{{ user_obj.name }}</td>
<td>{{ user_obj.password }}</td>
<td>
<a href="/edit/?edit_id={{ user_obj.pk }}" class="btn btn-primary">编辑</a>
<a href="/delete_user/?delete_id={{ user_obj.pk }}" class="btn btn-danger">删除</a>
</td>
</tr>
{% endfor %} </tbody>
</table> </div>
</div>
</div> </body>
</html>

userlist.html

3、删除数据

models.User.objects.filter(id=1).delete()  # 会将queryset所有的数据对象全部删除
def delete_user(request):
# 从get请求携带的参数中获取用户想要删除的数据id
delete_id = request.GET.get('delete_id')
# print(delete_id)
models.User.objects.filter(id=delete_id).delete()
# print(res) # <QuerySet [<User: tank>]>
# print(type(res)) # <class 'django.db.models.query.QuerySet'>
return redirect('/userlist/')

4、编辑数据

编辑对象的id的获取方式
方式1:利用input隐藏一个标签
<input type="hidden" name="edit_id" value="{{ user_obj.pk }}">
方式2:
<form action="/edit/?edit_id={{ user_obj.pk }}" method="post"> 注意:queryset对象点修改 删除 会作用于对象内部所有的数据对象 类似于批量操作
方式1:
models.User.objects.filter(id=edit_id).update(name=username,password=password)
方式2:获取到当前数据对象
user_obj = models.User.objects.filter(id=edit_id).first()
user_obj.name = username
user_obj.save()
def edit(request):
if request.method == 'POST':
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') # 将该数据查询出来渲染到一个编辑页面
# 查询方式一
user_obj = models.User.objects.filter(id=edit_id).first() # 查询方式二
# user_obj = models.User.objects.get(id=edit_id) # 将当前数据渲染到一个编辑页面上
return render(request, 'edit.html', locals())
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css">
<script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script> </head>
<body> <div class="container">
<div class="row">
<h1>编辑页面</h1>
<div class="col-md-6 col-md-offset-3">
<form action="" method="post">
<input type="hidden" name="edit_id" value="{{ user_obj.pk }}">
<p>username:<input type="text" name="username" class="form-control" value="{{ user_obj.name }}"></p>
<p>password:<input type="text" name="password" class="form-control" value="{{ user_obj.password }}"></p>
<input type="submit" class="btn btn-warning">
</form>
</div>
</div>
</div> </body>
</html>

edit.html

Django简单操作的更多相关文章

  1. hadoop 》》 django 简单操作hdfs 语句

    >> from django.shortcuts import render # Create your views here. from hdfs.client import Clien ...

  2. python django简单操作

    准备: pip3 install  django==1.10.3 cmd django-admin startproject  guest  创建一个guest的项目 cd guest manage. ...

  3. Django简单的数据库操作

    当然,本篇的前提是你已经配置好了相关的环境,这里就不详细介绍. 一. 在settings.py文件中设置数据库属性. 如下: DATABASES = { 'default': { 'ENGINE': ...

  4. Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页

    models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...

  5. django中操作cookie与session

    cookie 什么是Cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息. Cookie的 ...

  6. MySQL安装和简单操作

    MySQL数据库安装与配置详解 MySQL的安装请参考下面这篇博客,讲述的非常详细,各种截图也很清晰.http://www.cnblogs.com/sshoub/p/4321640.html MySQ ...

  7. [oldboy-django][2深入django]ORM操作

    推荐学习博客:http://www.cnblogs.com/wupeiqi/articles/6216618.html 需求: 汇总django orm操作,代替原生mysql语句来操作数据库:里面内 ...

  8. 1122 django属性操作orm字段数据操作

    目录 1. 静态文件的配置 手动静态文件的访问资源 静态文件的动态绑定 2.request方法 2.1 请求方式 2.2 获取前端的请求方式 request.method 2.3 request方法 ...

  9. django model 操作总结

    使用场景 一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了).//两个表的数据一一对应 例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足 ...

随机推荐

  1. angular [NgClass] [NgStyle],NgIf,[ngSwitch][ngSwitchCase]

    [NgClass]  CSS 类会根据表达式求值结果进行更新,更新逻辑取决于结果的类型: string - 会把列在字符串中的 CSS 类(空格分隔)添加进来, Array - 会把数组中的各个元素作 ...

  2. 【Linux 驱动】简单字符设备驱动架构(LED驱动)

    本文基于icool210开发板,内核版本:linux2.6.35: 驱动代码: (1)头文件:led.h #ifndef __LED_H__ #define __LED_H__ #define LED ...

  3. spring boot-9.对springMVC的支持

    1.thymeleaf spring boot 推荐的模板引擎是thymeleaf.spring boot 的自动配置已经默认配置好了themleaf,只要导入themleaf的Starter就可以了 ...

  4. 在 IntelliJ IDEA 中使用 Git,太方便了!

    git是目前流行的分布式版本管理系统.它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响.也 因此其近乎所有的操作都是本地执行,所以在断网的情况下任然可以提交代码,切 ...

  5. Linux mv命令(7)

    mv命令,move的缩写,顾名思义是移动文件的意思.其实就相当于剪切操作,而前面说的cp命令,就是复制粘贴,这两个有什么区别想必不用多说. 基本使用 使用格式 mv 源文件 目标文件 我的根目录下有 ...

  6. 【7.9校内test】T2 极值问题

    这个题真的,毫无思路的说,但是我们会打表啊: lz的打表之路: 当然是手写一个暴力啦(*^▽^*)! 然后滚去配置lemon测试一下暴力可以得多少分qwq: 是的40分呢! 然后其实看上面也能看出来一 ...

  7. Anaconda配置环境变量+创建虚拟环境+pycharm使用虚拟环境

    Anaconda配置环境变量+创建虚拟环境 配置环境变量 没有添加系统变量,所有系统根本识别不了conda命令,找不到位置,所以添加以下系统变量: 添加对应Anaconda环境变量:(以自己的安装路径 ...

  8. Centos7安装Beanstalkd

    安装 //安装 yum -y install beanstalkd --enablerepo=epel //查看版本 beanstalkd -v //启动 -b断电重启会恢复 /usr/bin/bea ...

  9. python 压缩文件(解决压缩路径问题)

    #压缩文件 def Zip_files(): datapath = filepath # 证据路径 file_newname = datapath + '.zip' # 压缩文件的名字 log.deb ...

  10. Codeforces 1215E. Marbles

    传送门 注意到 $a$ 的值的数量并不大,考虑状压 $dp$ 设 $f[S]$ 表示此时确定的数集合为 $S$ ,且按某种顺序从数列开头排列完成的最小交换次数 那么每个状态枚举最后一个填的数,加上代价 ...