Python框架Django之学习记录--Part 1
Django确实是个好东西,本身自带的框架解决了许多问题。我即将开始重新认真学习该框架,并决定用它来建立自己的个人博客网站。
cmd进入windows的命令提示符界面,切换到相应目录用mkdir新建Django文件夹并进入,然后新建Django文件夹并进入,**虚拟环境,进入虚拟环境。记住,新项目就要在其中建立独立的虚拟环境,以便后续管理。
然后在虚拟环境下,进行项目开始前的各项准备工作:
1.升级pip、安装Django、pymysql;
2. 创建项目相关:
注意:上面的命令最后要空格+句号(点),它表示在当前路径下创建项目。
执行上面的命令后看看生成的文件和文件夹,它们的作用如下所示:
-
manage.py
: 一个让你用各种方式管理 Django 项目的命令行工具。 -
oa/__init__.py
:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。 -
oa/settings.py
:Django 项目的配置文件。 -
oa/urls.py
:Django 项目的 URL 声明,就像你网站的“目录”。 -
oa/wsgi.py
:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。
然后就可以启动服务器,登录Django的测试页面了:
左下角的 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. 创建应用并修改相关配置:
执行上面的命令会在当前路径下创建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静态文件夹的相关文件,结构如下:
修改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):
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 manage.py makemigrations demo1
python manage.py migrate
django将会自动帮我们创建基本的表单,我们可以在数据库端用sql语句创建相应的数据库内容:
那么通过命令:python manage.py runserver,我们看到的页面是酱紫的:
说明我的初步试验页面已经制作完成了
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
至此我们还没有看到之前创建的模型类,需要在应用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)
至此,我们就可以在后台对数据库进行增删查改了!
呼,至此总算把这几天的重点内容记录完毕了,全靠日天大神的git内容。可参考:https://github.com/jackfrued/Python-100-Days/tree/master/Day41-55。
上一篇: 程序在计算机中是怎样运行的
下一篇: 函数式编程(二) 高阶函数