个人觉得,从简单的项目入手,这样学起来会很快。
在项目中,发现问题就说问题。
有错误的地方,欢迎大家指正出来,我去修改。也欢迎大家一起交流。
网上有很多python的基础教程,毕竟是基础,所以大多都是免费的,大家可以看看,有一点基础应该都可以看得懂。跟着一起边做简单的项目,边学习了
首先,打开pycharm创建名为:stu_test的项目,如图:
左侧选中Django,这里我的项目路径:E:\django_test\stu_test (stu_test是我的项目名称)
选择python解释器,这里我用本机的虚拟环境,选择第二个选项。第一个选项是创建虚拟环境。
最下面,填写APP的名称,这里用app01(只是学习阶段,名字随便起的,本人词量太少了,大家海涵)
点击Create,创建我的们的项目。(等待加载完成),项目就创建成功了,目录结构如下:
创建完成,第一时间先设置(stu_test/stu_test/settings.py)
由于是pycharm创建的,app自动就帮我们添加好了,模型也配置好了,我们可以先不管
数据库我们就先用sqlite吧,这是Django自带的,我们现在只是学习,暂时也够用了。
就先拉到最下面,修改下面两项,一个是语言环境,一个是时区。
LANGUAGE_CODE = 'zh_hans'
TIME_ZONE = 'Asia/Shanghai'
接下来就要添加字段了,我们先做个简单分析,构建一个结构,如图:(用记事本写的,有点渣,大家有好用的工具可以推荐下)
通过上图可以发现,字段中要包含班级,姓名,性别,年龄这几个字段。
其中每个班级中都有姓名,性别,年龄。(文字说不清了,最好的表达形式就是代码,我们上代码):
位置:stu_test/app1/models.py
from django.db import models
# 添加的表都需要继承自models.Model
# 创建名为StuClass的班级表
class StuClass(models.Model):
#models.CharField()字段类型为char
# verbose_name="班级" 设置字段名为班级
# max_length=10 长度为10
# null=False 不可以为空
# unique=True不允许重复
class_stu = models.CharField(verbose_name="班级", max_length=10, null=False, unique=True)
# auto_now_add=True 添加的时间
# 增加下面两个字段,方便到时候维护统计
add_time = models.DateTimeField(verbose_name="添加时间", auto_now_add=True)
# auto_now=True 当前时间
updata_time = models.DateTimeField(verbose_name="添加时间", auto_now=True)
# 创建名为Students的学生表
class Students(models.Model):
name = models.CharField(verbose_name="姓名", max_length=6, null=False)
age = models.IntegerField(verbose_name="年龄", null=False)
# 构造一个元组
genders = (
(0,"男"),
(1,"女"),
)
# choices的意思是选择,choices=genders在genders中选择
gender = models.IntegerField(verbose_name="性别", choices=genders)
add_time = models.DateTimeField(verbose_name="添加时间", auto_now_add=True)
updata_time = models.DateTimeField(verbose_name="添加时间", auto_now=True)
# 设置外键,与StuClass(班级关联起来)
# on_delete=models.CASCADE 的意思就是关联删除
# 所属的班级删除了,相应的学生也会删除
forkey = models.ForeignKey(to=StuClass, on_delete=models.CASCADE)
字段创建完毕,把字段添加到管理后台(Django自带的,不用自己写,是不是很方便?)
位置:stu_test/app1/admin.py (一看知道admin是管理员的意思)
from django.contrib import admin
# 导入models,就是我们刚写的字段类,同级目录我们用.models,星号代表导入全部
from .models import *
# 加入我们写的两个表
# admin.site.register 这一串死记硬背吧,发现这个在pycharm中没有提示
admin.site.register(StuClass)
admin.site.register(Students)
接下我们迁移数据 打开Terminal(在pycharm的左下角)如图
这里我们要注意方框里面,Djang_env 是使用的虚拟环境
E:\django_test\stu_test 是当前路径
输入下面代码,迁移文件
python manage.py makemigrations
继续输入如下代码
python manage.py migrate
我们要通过管理后台录入学生信息,那么就要创建管理员账户。输入下面代码:
python manage.py createsuperuser
根据提示,我们一次填入用户名,邮箱,密码如图:
我输入的密码是123456,说密码太常见了,要不要使用。
这里输入y 然后回车,就用这个密码。管理员账户就创建成功了。
接下来我们运行服务器,继续输入如下代码:
python manage.py runserver
提示如图:
这里的http://127.0.0.1:8000/ 其中127.0.0.1代表我们本机的,端口为8000。
服务器就跑起来了,接下来打开http://127.0.0.1:8000/admin(注意:地址里面的admin不是我们管理员用户名,是路由里面的地址,位置:stu_test/stu_test/urls.py中默认的,我们先不修改)
打开后如下:
输入我们的用户名密码,我这里是admin和123456
我们会看到下图:
这里可以看到之前创建的两个表,
看着是不是哪里有点别扭,两个表的名字英文的看起来很不舒服?
我们打开之前的models.py,修改代码如下
from django.db import models
class StuClass(models.Model):
class_stu = models.CharField(verbose_name="班级", max_length=10, null=False, unique=True)
add_time = models.DateTimeField(verbose_name="添加时间", auto_now_add=True)
updata_time = models.DateTimeField(verbose_name="添加时间", auto_now=True)
class Meta:
verbose_name = "班级"
verbose_name_plural = verbose_name
class Students(models.Model):
name = models.CharField(verbose_name="姓名", max_length=6, null=False)
age = models.IntegerField(verbose_name="年龄", null=False)
genders = (
(0,"男"),
(1,"女"),
)
gender = models.IntegerField(verbose_name="性别", choices=genders)
add_time = models.DateTimeField(verbose_name="添加时间", auto_now_add=True)
updata_time = models.DateTimeField(verbose_name="添加时间", auto_now=True)
forkey = models.ForeignKey(to=StuClass, on_delete=models.CASCADE)
class Meta:
# 把表的名字改为学生
verbose_name = "学生"
# 这句是复数的意思,我们都知道英语里面,复数大多数是在单词后面加s,如果我们不写这句
# 到时候显示的名字就是 学生s了
verbose_name_plural = verbose_name
保存一下,服务器会自动重启,我们刷新下刚才的页面:
是不是看着就方便许多呢?
接下来我们添加数据,先添加几个班级,比如1班,2班,3班
这里就不细说了,都是中文,相信都会添加了。
添加完成后,我们进入班级里面,如图:
这都是什么,看起来很费劲。我们再打开models.py文件,修改如下代码:
from django.db import models
class StuClass(models.Model):
class_stu = models.CharField(verbose_name="班级", max_length=10, null=False, unique=True)
add_time = models.DateTimeField(verbose_name="添加时间", auto_now_add=True)
updata_time = models.DateTimeField(verbose_name="添加时间", auto_now=True)
class Meta:
verbose_name = "班级"
verbose_name_plural = verbose_name
def __str__(self):
return self.class_stu
class Students(models.Model):
name = models.CharField(verbose_name="姓名", max_length=6, null=False)
age = models.IntegerField(verbose_name="年龄", null=False)
genders = (
(0,"男"),
(1,"女"),
)
gender = models.IntegerField(verbose_name="性别", choices=genders)
add_time = models.DateTimeField(verbose_name="添加时间", auto_now_add=True)
updata_time = models.DateTimeField(verbose_name="添加时间", auto_now=True)
forkey = models.ForeignKey(to=StuClass, on_delete=models.CASCADE)
class Meta:
verbose_name = "学生"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
我们可以看到
# 班级表中多了:
def __str__(self):
# self.class_stu
# self代表当前类
# self.class_stu就是当前类下的class_stu字段
# 不难发现,class_stu这个字段使我们定义的班级的名字
return self.class_stu
# 学生表中多了:
# 为什么要写这里呢,因为到时候添加学生的时候,也会是这样子
# 你们可以先不写,到时候添加学生的时候再写也行
# 这里直接加上,是为了减少一些没必要的复制
def __str__(self):
# 与班级同理
return self.name
保存一下,我们再刷新下页面看看,如图
这样是不是就不别扭了,def str(self): 这里我们硬记下来就行
接下来我们添加学生。举一反三,应该学生大家也会添加了。现在是学习嘛,没必要加那么多,我大概加了一些,如图:
这样,我们就把数据在后台录入完毕了。此篇到此结束,下一篇我们来讲如何配置路由,创建页面,以及增删改查,大家可以先自己动手敲一遍,增加一些印象,这样学起来也会快很多。
写了一下午了,该吃晚饭了,一天都没吃,饿的不行,大家也要多注意身体呀。
有不明白的,大家可以留言或者私信,我们一起交流