Django2.0单表图书馆系统开发流程

Django单表开发流程css

 

1、建立Django项目:html

  (1)cmd下python

    1.查看Django版本:python -m django --versionmysql

    2.建立Django项目:django-admin startproject mysite(cd到你要建立的文件下)git

    3.切换到Django项目目录下,启动Django:python manage.py runserversql

  (2)pycharm下数据库

    1.New Project:建立新的Django项目(建议在more setting 中,可设置应用application namedjango

2、设置settings.py文件:app

(1)修改TEMPLATES中的'DIRS':函数

1 os.path.join(BASE_DIR,  'templates')

 

(2)若是想打印orm转换过程当中的sql,须要在settings中进行以下配置:

 1 LOGGING = {  2     'version': 1,  3     'disable_existing_loggers': False,  4     'handlers': {  5         'console':{  6             'level':'DEBUG',  7             'class':'logging.StreamHandler',  8  },  9  }, 10     'loggers': { 11         'django.db.backends': { 12             'handlers': ['console'], 13             'propagate': True, 14             'level':'DEBUG', 15  }, 16  } 17 }

(3)把settings自带的DATABASES替换成本身的:

DATABASES = { 'default':{ 'ENGINE': 'django.db.backends.mysql',  # 改为所用的数据库
        'NAME':'library',  # 要链接的数据库,链接前在帐号下须要建立好数据库
        'USER':'root2',  # 链接数据库的用户名
        'PASSWORD':'123',  # 链接数据库的密码
        'HOST':'127.0.0.1',  # 链接主机默认本机
        'POST':3306  # 端口 默认3306
 } }

(4)若是INSTALLED_APPS里没有应用的名称,须要手动添加“application name”

(5)管理不一样应用的css/js等静态文件:在一个应用里建立static文件夹,用于管理文件

  结构:

  settings.py:添加代码

STATICFILES_DIRS=[ os.path.join(BASE_DIR, "static"), ]

 

3、为应用配置models.py

(1)models.py用于建立表结构:以后表的增删改查所有由该类的对象进行操做

 1 from django.db import models #必须导入  2 
 3 # Create your models here.
 4 
 5 class Book(models.Model): # 类必定要继承models.Model  6     id = models.AutoField(primary_key=True)#AutoField:自增;primary_key:主键
 7     title = models.CharField(max_length=32)#CharField:字符串
 8     pub_date = models.DateField()  9     price = models.DecimalField(max_digits=8, decimal_places=2)#相似于double,精读高的浮点数,max_digits最大位数(包括decimal小数部分),decimal小数部分
10     publish = models.CharField(max_length=32) 11 
12     #打印对象,默认打印一长串object属性
13     #__str__当对象生成的时候自动触发
14     def __str__(self): 15 return self.title # 打印对象的QuerySet类型

(2)必定要在项目全局文件中的__init__中设置:

1 import pymysql 2 
3 pymysql.install_as_MySQLdb()

 

 

 

(3)建立完以后必定要运行:进行python语句和sql语句的转换

1 两条数据库迁移命令便可在指定的数据库中建立表 : 2 python manage.py makemigrations 3 python manage.py migrate

4、urls里配置路由

(1)导入建立应用的views

1 from django.urls import path, re_path 2 from app01  import views

(2)配置路由

urlpatterns = [ path('admin/', admin.site.urls), path('book/', views.book), path('addbook/', views.addbook), re_path('^$', views.book), re_path(r"book/(\d+)/delete", views.delbook) , # (\d+)捕获数字 delbook(request,数字)
    re_path(r"book/(\d+)/change", views.changebook)  # (\d+)捕获数字 delbook(request,数字)
 ]

(3)若是有多个应用,则应该使用分发:让每个应用有单独本身的url路径

  第一步:为每个应用建立一个urls.py进行分流

  第二步:在全局urls中进行分发:

1     #分发:
2     #让每个应用有单独本身的url路径
3     re_path(r"app01/",include(("app01.urls","app01"))),  # include(('',''))建立两个房间,第二个参数:namespace用来区别一样的urls
4     re_path(r"app02/",include(("app02.urls","app02"))), 5 
6     #去掉app01/的分发:
7     re_path(r"^",include("app01.urls")), 8 
9     path("articles/<mm:month>/", views.month)

 

 

5、建立对应的视图函数

(1)导入必要的模块

from django.shortcuts import render, HttpResponse, redirect

(2)视图函数都须要有返回值return,一般返回值有三种

1 return render(request, 'changebook.html',{"book_obj":book_obj}) # 给html传入值须要遵循格式:{"book_obj":变量} 2 return HttpResponse("Hello World") 3 return redirect("/book")  # 进行重定向,再也不须要在form表单action里进行定义

(3)获取input标签里的值(input标签里必定要定义name="",才能从请求中根据name找到对应的value):

1     if request.method == 'POST':  # 判断请求方式
2         title = request.POST.get("title") 3         price = request.POST.get("price") 4         pub_date = request.POST.get("pub_date") 5         publish = request.POST.get("publish") 6 
7#添加表数据,须要导入表对象Book
 8 book_obj = Book.objects.create(title=title, price=price, pub_date=pub_date, publish=publish)

(4)表对象的各类obj.object.操做:

首先导入须要用到的表:

from app01.models import Book

从表中拿到input收集到的各类value

book_list = Book.objects.all()  # [obj1,obj2....]

经过render传入变量

return render(request,'book.html',locals())  #local()传入该函数局部变量

(5)模板语法

html页面for循环添加table-tbody元素(元素由render传入的变量提供)

 1 <tbody>
 2     {% for book in book_list %}  3         <tr>
 4             <td>{{ book.title }}</td>  #经过模板语法{{}}调用表对象的属性
 5             <td>{{ book.price }}</td>
 6             <td>{{ book.pub_date|date:"Y-m-d" }}</td>  # 经过过滤器|date:"参数"改变日期格式
 7             <td>{{ book.publish }}</td>
 8             <td>
 9 <a href="/book/{{ book.pk }}/delete" class="btn btn-danger">删除</a>  # pk为表的自增主键,自动查找
10        </td>
11             <td>
12 <a href="/book/{{ book.pk }}/change" class="btn btn-info">编辑</a>
13        </td>
14         </tr>
15     {% endfor %} 16 </tbody>

点击删除按钮删除数据:经过a标签跳转到带有对应ID的数据库数据url(全局url路由器里)一般在网页上对数据进行操做都须要定义一个url(r"xx/(\d+)/xxx")格式专门用于操做

re_path(r"book/(\d+)/delete", views.delbook) , # (\d+)捕获数字 delbook(request,数字)

经过模板语法进行删除;再返回该页面(redirect)

1 def delbook(request, id): 2 
3     Book.objects.filter(id=id).delete()  # 删除book.pk对应的ID的数据
4 
5     #删除后进行重定向须要导入redirect
6     return redirect("/book")

修改数据:与删除同样拿到数据惟一的ID,进行修改

 1 def changebook(request, id):  2     #a标签进入的页面默认为get
 3     #无论是什么请求进入的changebook都获取book_obj
 4     book_obj = Book.objects.filter(id=id).first()  #first() 拿到queryset的第一个对象
 5 
 6     if request.method == "POST":  7         title = request.POST.get("title")  8         price = request.POST.get("price")  9         pub_date = request.POST.get("pub_date") 10         publish = request.POST.get("publish") 11 
12         #当进入编辑页面后点击提交,进入post,对数据进行修改
13         book_obj = Book.objects.filter(id=id).update(title=title, price=price, pub_date=pub_date, publish=publish) 14 
15         return redirect("/book") 16 
17 
18     return render(request, 'changebook.html',{"book_obj":book_obj})

 

总结:

1.要在html文件里根据数据库生成标签需熟练运用模板语法for:

1     {% for person in person_list %}  # 循环对象列表2         <p>{{ forloop.counter }} {{ person.name }},{{ person.age }}</p>  # 两个变量之间可设置不一样的分隔符,forloop为索引
    {% empty %} #若是列表为空就打印empty后的标签内容5 <p>列表为空</p> 6 {% endfor %}

2.在登陆注册界面中,常常运用模板语法if

 1     {% if user %}  2         <p>
 3             <a href="">hi {{ user }}</a>
 4             <a href="">注销</a>
 5         </p>
 6     {% else %}  7         <p>
 8             <a href="">登录</a>
 9             <a href="">注册</a>
10         </p>
11     {% endif %}

 

3.一般按钮的跳转页面,在views.py中return redirect("/url/")进行重定向  /  a标签订义的按钮使用href="/url/"进行页面跳转

4.有按钮的地方就有post访问,则视图函数中一般会进行if request.method对请求进行判断,让网页return到不一样的页面

相关文章
相关标签/搜索