Django入门

Django入门

创建应用

使用一个应用开发一个业务模块,这里创建一个图书信息的应用

python manage.py startapp bookinfo

  • _init.py_是一个空文件,表示当前目录booktest可以当作一个- python包使用。

  • tests.py文件用于开发测试用例,在实际开发中会有专门的测试人员,这个事情不需要我们来做。

  • models.py文件跟数据库操作相关。

  • views.py文件跟接收浏览器请求,进行处理,返回页面相关。

  • admin.py文件跟网站的后台管理相关。

创建完成之后在settings.py的 INSTALLED_APPS中添加bookinfo的应用。

INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘bookinfo’,
]

设计模型

设计一个图书类

模型类的定义在models.py中,继承自models.Model类。在创建是不需要定义主键,在表生成时django会为我们自动添加主键,并且自动增长。

from django.db import models
class BookInfo(models.Model):
book_name = models.CharField(max_length=20)
book_auther = models.CharField(max_length=20)
book_pub_date = models.DateField()

设计完模型类之后进行数据迁移:

python manage.py makemigrations

python manage.py migrate

执行第一条语句之后再我们创建的应用里的migrations里会多一个0001_initial.py的迁移文件,打开后会看到django为我们自动添加了id列,并且自动增长。

执行第二条语句之后会将该迁移文件中的属性,在数据库中生成对应表,在mysql中使用以下语句查看表结构:

desc bookinfo_bookinfo;

设计一个图书详情类

步骤同图书类的创建

class BookDetail(models.Model):
book_price = models.FloatField()
book_auther = models.CharField(max_length=20)
book_pages = models.IntegerField()

迁移文件

python manage.py makemigrations

python manage.py migrate

数据表的增删改查

  • 完成数据表的迁移之后,接下来对数据进行操作

python manage.py shell

首先导入bookinfo/modules中的类,新建图书对象

from datetime import date
from booktest.models import BookInfo,BookDetail
book=BookInfo()
book.book_name=“Django入门”
book.book_pub_date=date(1991,1,31)
book.save()

使用book.delete()删除对象
使用BookInfo.objects.all()获取全部信息
重新对类属性赋值即为修改

管理站点

通常再Django项目中都需要进行后台管理,Django能够根据定义的模型类自动生成管理页面。
首先创建一个超级用户

python manage.py createsuperuser

输入用户名,邮箱密码之后,创建成功。在后台中我们并没有注册模型,所以再admin.py中注册模型类。

from django.contrib import admin
from bookinfo.models import BookInfo,BookDetail

admin.site.register(BookInfo)
admin.site.register(BookDetail)

启动django服务,登陆127.0.0.1:8000/admin进入后台管理

python manage.py runserver

启动后会发现,列表信息为BookInfo objects,需要点进去才能看到图书信息,这样不方便管理,所以我们自定义列表显示为我们的图书信息。

将admin.py更新为以下代码:

from django.contrib import admin
from django.contrib import admin
from bookinfo.models import BookInfo,BookDetail
class BookInfoAdmin(admin.ModelAdmin):
list_display = [‘id’,‘book_name’,‘book_pub_data’]
class BookDetailAdmin(admin.ModelAdmin):
list_display = [‘id’,‘book_price’,‘book_auther’,‘book_pages’]
admin.site.register(BookInfo, BookInfoAdmin)
admin.site.register(BookDetail, BookDetailAdmin)

重启服务器,得到我们想要的结果。

视图及URL

后台管理页面做好了,我就需要做公共访问的页面了,而刚才我们输入的http://127.0.0.1/admin/就是一个url请求,服务器收到这个请求之后会有一个处理,并返回。这个过程就是我们由视图来完成。

  • 定义视图函数

    视图函数被定义在views.py中,首先我们定义一个index,即首页。

    from django.shortcuts import render
    from django.http import HttpResponse
    def index(request):
    return HttpResponse(“这是首页”)

  • 配置URLs

    请求者在浏览器中输入URL,向服务器发送请求,服务器会在编写好的URLconf中逐条匹配,如果匹配成功则返回对应的视图函数,若没有匹配成功,则返回404 Page Not Found。

  1. 首先我们在bookinfo下新建urls.py文件,定义一个列表,用来匹配views.py中的视图函数。

    from django.urls import path
    from bookinfo import views
    urlpatterns = [
    path(’’, views.index),
    ]

  2. 打开项目文件夹中的urls.py文件,为urlpatters列表添加我们创建的urls。

    from django.contrib import admin
    from django.urls import path
    from django.conf.urls import include
    urlpatterns = {
    path(‘admin/’, admin.site.urls),
    path(‘index/’, include(‘bookinfo.urls’))
    }

  3. 在浏览器中输入http://127.0.0.1/index/则显示“这是首页”。

注意

在Django2.0之后的版本中,默认不使用正则匹配URLS,如果想用正则进行匹配,则需要导入模块。

from django.urls import re_path

由re_path替换path即可。

模板

当我们想要让我们的页面变得更加好看,我们就需要用到模板文件了。

  • 创建模板

    在项目文件夹中新建文件夹templates,创建一个与应用同名的文件夹,名为bookinfo。

  • 设置模板路径

    在settings.py文件中设置TEMPLATES的DIRS值。

    ‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)]

  • 定义模板
    打开templates/bookinfo,创建index.html文件

      	<html lang="en">
      	<head>
      	    <meta charset="UTF-8">
      	    <title>这是标题</title>
      	</head>
      	<body>
      	<h2>图书列表</h2>
      	<ul>
      	    {% for book in books %}
      	        <li>{{ book.book_name }}--<a href="/delete{{ book.id }}">删除</a></li>
      	    {% endfor %}
      	</ul>
      	</body>
      	</html>
    
  • 添加删除功能

    在views.py中添加delete函数

    def delete(request, book_id):
    book = BookInfo.objects.get(id=book_id)
    book.delete()
    return redirect(’/index’)

    为了使用方便快捷,使用redirct重定向回首页。

  • 在bookinfo的URL列表中添加delete函数

    urlpatterns = [
    path(‘index/’, views.index),
    re_path(’^delete(\d+)$’, views.delete),
    ]

重启服务器得到我们想要的结果。

注意

可能会遇到的问题

页面显示不出来,第一步看后台报错信息

  • 编码问题/后台管理问题

    后台报错

    UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa6 in position 9737: ill

    页面显示

    A server error occurred. Please contact the administrator

    在系统设置中,区域和语言->管理语言设置->更改系统区域设置->将使用Unicode UTF-8 提供全球语言支持 打钩

    使用windows系统做开发踩的大坑坑,所以搞开发还是Linux

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值