欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python框架Django之学习记录--Part 1

程序员文章站 2022-05-28 21:42:46
...

Django确实是个好东西,本身自带的框架解决了许多问题。我即将开始重新认真学习该框架,并决定用它来建立自己的个人博客网站。

cmd进入windows的命令提示符界面,切换到相应目录用mkdir新建Django文件夹并进入,然后新建Django文件夹并进入,**虚拟环境,进入虚拟环境。记住,新项目就要在其中建立独立的虚拟环境,以便后续管理。

Python框架Django之学习记录--Part 1


然后在虚拟环境下,进行项目开始前的各项准备工作:

1.升级pip、安装Django、pymysql;

Python框架Django之学习记录--Part 1


2. 创建项目相关:

Python框架Django之学习记录--Part 1

注意:上面的命令最后要空格+句号(点),它表示在当前路径下创建项目。

执行上面的命令后看看生成的文件和文件夹,它们的作用如下所示:

  • manage.py: 一个让你用各种方式管理 Django 项目的命令行工具。
  • oa/__init__.py:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。
  • oa/settings.py:Django 项目的配置文件。
  • oa/urls.py:Django 项目的 URL 声明,就像你网站的“目录”。
  • oa/wsgi.py:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。

然后就可以启动服务器,登录Django的测试页面了:

Python框架Django之学习记录--Part 1


Python框架Django之学习记录--Part 1

左下角的 Django Documentation 点进去可以选择中文官方文档,进行相关的学习。


3. 用pycharm打开项目文件夹,开始修改settings:

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

# internationalization
USE_I18N = True

# localization
USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATIC_URL = '/static/'


4. 创建应用并修改相关配置:

Python框架Django之学习记录--Part 1

执行上面的命令会在当前路径下创建demo1目录,其目录结构如下所示:

  • __init__.py:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。
  • admin.py:可以用来注册模型,让Django自动创建管理界面。
  • apps.py:当前应用的配置。
  • migrations:存放与模型有关的数据库迁移信息。
    • __init__.py:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。
  • models.py:存放应用的数据模型,即实体类及其之间的关系(MVC/MVT中的M)。
  • tests.py:包含测试应用各项功能的测试类和测试函数。
  • views.py:处理请求并返回响应的函数(MVC中的C,MVT中的V)。


修改views.py

# from random import randint

from django.shortcuts import render

from demo1.models import Teacher


def home(request):
    # teacher = {'name': '余婷',
    #            'job': 'Python高级讲师',
    #            'intro': '专注Python开发100年',
    #            'motto': '跟着婷姐超'}
    # no = randint(1, 6)
    # 通过ORM框架实现持久化操作CRUD
    ctx = {'teachers_list': list(Teacher.objects.all())}
    return render(request, 'demo/home.html', ctx)

显示动态内容,指向资源文件夹的demo目录下的home.html文件;定义变量ctx做为字典放置相关显示的内容。


创建templates模板文件夹及static静态文件夹的相关文件,结构如下:

Python框架Django之学习记录--Part 1

修改home.html文件,用jinja2语法创建动态模板:

<!DOCTYPE html>
{% load staticfiles %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>讲师信息</title>
</head>
<body>
{% for x in teachers_list %}
    <h1>{{ x.name }}老师 - {{ x.job }}</h1>
    <p><strong>讲师简介</strong></p>
    <p>{{ x.intro }}</p>
    <p><strong>教学理念</strong></p>
    <p>{{ x.motto }}</p>
    <p>
        {% if x.photo %}
            <img src="{% static x.photo %}">
        {% endif %}
    </p>
    <hr>
{% endfor %}
</body>
</html>

修改主目录teacher的urls.py:

from django.contrib import admin
from django.urls import path

from demo1 import views

urlpatterns = [
    path('', views.home),  # 映射views文件内的home函数方法
    path('admin/', admin.site.urls),
]

说明:上面使用的path函数是Django 2.x中新添加的函数,除此之外还有re_path是支持正则表达式的URL映射函数;Django 1.x中是用url函数来设定URL映射。


再次修改settings.py,app、templates等,也可以提前把数据库相关设置改好(本次使用MySQL):

Python框架Django之学习记录--Part 1

Python框架Django之学习记录--Part 1

Python框架Django之学习记录--Part 1


5. 配置数据库:

如果使用Python 3需要修改项目__init__.py文件并加入如下所示的代码,这段代码的作用是将PyMySQL视为MySQLdb来使用,从而避免Django找不到连接MySQL的客户端工具而询问你:“Did you install mysqlclient? ”(你安装了mysqlclient吗?)。

import pymysql

pymysql.install_as_MySQLdb()

打开app(demo1)的model.py文件并写入代码:

from django.db import models


# Django框架中包含了ORM(对象关系映射)框架
# ORM可以帮助我们完成对象模型到关系模型的双向转换
class Teacher(models.Model):

    no = models.AutoField(primary_key=True, db_column='tno', verbose_name='编号')
    name = models.CharField(max_length=20, db_column='tname', verbose_name='姓名')
    job = models.CharField(max_length=10, db_column='tjob', verbose_name='职位')
    intro = models.CharField(max_length=1023, db_column='tintro', verbose_name='简介')
    motto = models.CharField(max_length=255, db_column='tmotto', verbose_name='教学理念')
    photo = models.CharField(max_length=511, db_column='tphoto', null=True)

    class Meta:
        db_table = 'tb_teacher'
        ordering = ('-no',)

说明:上面定义模型时使用了字段类及其属性,其中IntegerField对应数据库中的integer类型,CharField对应数据库的varchar类型,DecimalField对应数据库的decimal类型,ForeignKey用来建立多对一外键关联。字段属性primary_key用于设置主键,max_length用来设置字段的最大长度,db_column用来设置数据库中与字段对应的列,verbose_name则设置了Django后台管理系统中该字段显示的名称。

注意:类的继承选择models.Model,就可以得到Django框架的ORM功能,使用crud对数据库数据进行增删改查。

例:在虚拟环境中使用python manage.py shell命令,定义变量x=Teacher(),然后x.name = ??  x. xxx = ???   最后x.save(),一切搞定!


打开Navicat,并在本地或云服务器数据库内创建新的数据库,跟app同名:

create database demo1 default charset utf8;

Python框架Django之学习记录--Part 1


数据迁移操作:
python manage.py makemigrations demo1
python manage.py migrate

django将会自动帮我们创建基本的表单,我们可以在数据库端用sql语句创建相应的数据库内容:

Python框架Django之学习记录--Part 1


那么通过命令:python manage.py runserver,我们看到的页面是酱紫的:

Python框架Django之学习记录--Part 1

Python框架Django之学习记录--Part 1

Python框架Django之学习记录--Part 1

说明我的初步试验页面已经制作完成了


6. Django的自带后台初步个性化定制:

创建管理员:

python manage.py createsuperuser
Username (leave blank to use 'XXX'): xxxxxxx
Email address: aaa@qq.com
Password: 
Password (again): 
Superuser created successfully.
启动服务器
python manage.py runserver
登陆admin管理后台:访问http://127.0.0.1:8000/admin

Python框架Django之学习记录--Part 1

至此我们还没有看到之前创建的模型类,需要在应用app(demo1)的admin.py文件中模型进行注册:

from django.contrib import admin

from demo1.models import Teacher


# 定制管理类
class TeacherAdmin(admin.ModelAdmin):
    list_display = ('no', 'name', 'job', 'intro', 'motto')  # 显示的内容
    search_fields = ('name', 'intro', 'job')  # 搜索框及搜索范围
    ordering = ('no', )  # 排序


# 注册模型和模型管理类
admin.site.register(Teacher, TeacherAdmin)

至此,我们就可以在后台对数据库进行增删查改了!

Python框架Django之学习记录--Part 1

Python框架Django之学习记录--Part 1


呼,至此总算把这几天的重点内容记录完毕了,全靠日天大神的git内容。可参考:https://github.com/jackfrued/Python-100-Days/tree/master/Day41-55。