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>
login.html

注意: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),
]
urls.py
 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')
views.py
 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>
add_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     <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>
publisher_list

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),
]
urls.py
#删除指定的出版社
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/')
views.py

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})
views.py
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)
]
urls.py
 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>
edit_publisher

 

posted @ 2018-08-05 22:50  叫你你敢答应么  阅读(99)  评论(0)    收藏  举报