Django ORM基础
目录
Django安装和介绍
创建一个Django项目
一、Django 安装和介绍
在Windows下安装方法:pip3 install django==1.11.11 或使用源的方式安装: pip3 install django==1.11 -i https://pypi.tuna.tsinghua.edu.cn/simple 卸载使用: pip3 uninstall django
创建Django项目的两种方式
1、命令行方式创建
django-admin startproject s21django #在当前目录下,创建一个名为s21django的项目,前提是选择好路径
2、pycharm方式创建
如下图:



pycharm方式启动Django项目

二、创建一个Django项目
用户登录系统
1、在urls.py中配置
#导入views模块 from app01 import views #加入login路由信息 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/',views.login) ]
2、编辑views.py
def login(request): return render(request,'login.html')
3、创建login.html文件 (html文件默认是存放在templates目录下)
1 <div class="container"> 2 <div class="row"> 3 <div class="col-md-4 col-md-offset-4" style="margin-top: 70px"> 4 5 <form class="form-horizontal" action="/login/" method="POST"> 6 <div class="form-group"> 7 <label for="inputEmail3" class="col-sm-2 control-label">用户名</label> 8 <div class="col-sm-10"> 9 <input type="text" name="username" class="form-control" id="inputEmail3" placeholder="username"> 10 </div> 11 </div> 12 <div class="form-group"> 13 <label for="inputPassword3" class="col-sm-2 control-label">密码</label> 14 <div class="col-sm-10"> 15 <input type="password" name="password" class="form-control" id="inputPassword3" placeholder="Password"> 16 </div> 17 </div> 18 <div class="form-group"> 19 <div class="col-sm-offset-2 col-sm-10"> 20 <button type="submit" class="btn btn-default">登录</button> 21 </div> 22 </div> 23 </form> 24 </div> 25 </div> 26 </div>
注意:form表单应设置action="/login/" method="POST"
4、设置bootstrap.js文件存放路径,在settings.py文件
#这一行暂且注释 # 'django.middleware.csrf.CsrfViewMiddleware', #最下方添加 STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ]
5、获取login.html页面传送的用户名和密码
def login(request): #判断request请求是否为POST if request.POST: #print(request.POST) #print获取的是一个大字典:<QueryDict: {'username': ['alex'], 'password': ['alexsb']}> #POST请求获取数据用get()方法 name = request.POST.get("username") passwd = request.POST.get("password") if name == "alex" and passwd == "alexdsb": return render(request,'login_success.html') return render(request,'login.html')
三、Django使用ORM工具连接mysql数据库
前提先创建好库
>create database s21 charset utf8;
1、编辑settings.py,填写mysql连接信息
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 's21', #数据库名,编码utf8 'HOST':'127.0.0.1', #主机名 'PORT':3306, #端口 'USER':'root', #用户名 'PASSWORD':'' #密码,此处为空 } }
2、models.py创建类
#所有和数据库ORM相关的类都在这个文件定义 #定义一个 出版社 类 class Publisher(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=30)
3、Django创建类对应的表
F:\pycharm\python21期\day16\mysite> python manage.py makemigrations --> 将models.py的改动记录在小本本上
F:\pycharm\python21期\day16\mysite> python manage.py migrate --> 将变更记录翻译成SQL语句,去数据库执行
4、ORM单表的增删改查
#前提先导入models模块 from app01 import models #查询Publisher类中所有数据 models.Publisher.object.get.all() models.Publisher.object.get(id=1) #增加 models.Publisher.object.create(name='xxx') #删除 models.Publisher.object.get(id=1).delete() #修改 #先获取编辑的对象 obj = models.Publisher.object.get(id=2) #修改 obj.name = 'new_name' #将修改同步到数据库 obj.save()
项目一:搭建一个出版社项目
实现的功能:添加一条出版社名称,可以修改、删除
1、添加功能
urlpatterns = [ url(r'^login/',views.login), url(r'publisher_list',views.publisher_list), url(r'add_publisher',views.add_publisher), ]
1 #查询所有出版社数据 2 def publisher_list(request): 3 data = models.Publisher.objects.all() 4 return render(request,'publisher_list.html',{"data":data}) 5 6 7 #添加出版社 8 def add_publisher(request): 9 if request.POST: 10 print(request.POST) 11 publisher_name = request.POST.get("publisher_name") 12 models.Publisher.objects.create(name = publisher_name) 13 return redirect("/publisher_list/") 14 return render(request,'add_publisher.html')
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>添加出版社</title> 6 <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"> 7 </head> 8 <body> 9 <form action="/add_publisher/" method="POST"> 10 <input type="text" name="publisher_name" placeholder="添加出版社"> 11 <button class="btn btn-info btn-sm">添加</button> 12 </form> 13 14 </body> 15 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>出版社列表</title> 6 <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"> 7 </head> 8 <body> 9 <div class="container"> 10 <div class="row"> 11 <div class="col-md-4 col-md-offset-4" style="margin-top: 70px"> 12 <table class="table"> 13 <thead> 14 <tr> 15 <th>序号</th> 16 <th>出版社名称</th> 17 <th>操作</th> 18 </tr> 19 </thead> 20 <tbody> 21 {% for obj in data %} 22 <tr> 23 <td>{{ obj.id }}</td> 24 <td>{{ obj.name }}</td> 25 <td> 26 <a class="btn btn-info btn-sm" href="/edit_publisher/?id={{ obj.id }}">编辑</a> 27 <a class="btn btn-warning btn-sm" href="/del_publisher/?id={{ obj.id }}">删除</a> 28 </td> 29 </tr> 30 {% endfor %} 31 32 33 </tbody> 34 35 <tfoot> 36 <a href="/add_publisher/" class="btn btn-info btn-sm">添加出版社</a> 37 </tfoot> 38 </table> 39 </div> 40 </div> 41 </div> 42 </body> 43 </html>
2、删除功能
urlpatterns = [ url(r'login/',views.login), url(r'publisher_list',views.publisher_list), url(r'add_publisher',views.add_publisher), url(r'del_publisher',views.del_publisher), ]
#删除指定的出版社 def del_publisher(request): print(request.GET) delete_id = request.GET.get("id") models.Publisher.objects.get(id = delete_id).delete() return redirect('/publisher_list/')
3、修改功能
#编辑出版社 def edit_publisher(request): if request.POST: print(request.POST) publisher_name = request.POST.get("publisher_name") edit_id = request.POST.get("id") obj = models.Publisher.objects.get(id=edit_id) obj.name = publisher_name obj.save() return redirect('/publisher_list/') #获取url中的id edit_id = request.GET.get("id") obj = models.Publisher.objects.get(id=edit_id) return render(request,'edit_publisher.html',{'publisher':obj})
urlpatterns = [ url(r'login/',views.login), url(r'publisher_list',views.publisher_list), url(r'add_publisher',views.add_publisher), url(r'del_publisher',views.del_publisher), url(r'edit_publisher',views.edit_publisher) ]
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>修改出版社</title> 6 <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"> 7 </head> 8 <body> 9 <form action="/edit_publisher/" method="POST"> 10 <input type="text" name="id" value="{{ publisher.id }}" style="display: none"> 11 <input type="text" name="publisher_name" placeholder="{{ publisher.name }}"> 12 <button class="btn btn-info btn-sm">修改</button> 13 </form> 14 15 </body> 16 </html>

浙公网安备 33010602011771号