从今天起,做一个大型且功能齐全的商城项目!
小知识科普:
问:Python可以做网页、APP或小程序吗?
答:Python可以做APP或者小程序的后端功能接口,但APP,小程序,网页都不是任何一门语言能够独立开发出来的,如HTML+Django,Java+HTML等等。
快捷键科普:
Ubuntu里快捷键:
Ctrl+L
是清屏,即命令行快速切换至下一页。
删除分支
命令
git branch -d hot-fix
:删除热修复分支。
![]()

配置项目的环境
mkvirtualenv -p /usr/bin/python3 ls_shopping_center
:创建一个虚拟环境ls_shopping_center。
![]()
pip install django -i https://pypi.douban.com/simple
:这里用国内的源镜像地址能够更快地安装django模块。
![]()
pip install djangorestframework -i https://pypi.douban.com/simple
:这里用国内的源镜像地址能够更快地安装djangorestframework模块。
![]()
pip list
:出现如下结果即表示模块安装成功。
![]()
django-admin startproject ls_shopping_center
:新建一个django项目文件夹ls_shopping_center。
![]()
mysql -uroot -p
以root用户身份进入mysql数据库
![]()
CREATE DATABASE `ls_shopping_center` CHARSET='utf8';
新创建一个编码格式为utf8的数据库ls_shopping_center。
![]()
创建一个用户,只给它本项目数据库的操作权限。GRANT ALL PRIVILEGES ON ls_shopping_center.* TO 'lsu'@'%' IDENTIFIED BY 'qwe123';
:这里是将ls_shopping_center这个数据库中的所有权限都给lsu这个用户,他可以通过密码qwe123进行访问,%是指远程登录。FLUSH PRIVILEGES;
:刷新用户权限。
![]()
mysql -ulsu -p
:通过上方新创建的用户登录数据库。
![]()
pip install pymysql -i https://pypi.douban.com/simple
安装pymysql模块。
![]()
vim .gitignore
:编辑配置文件,过滤掉不需要提交的内容。
![]()
![]()
下方图片中为过滤掉的内容,不参与提交。
过滤掉的内容
git add .
与git commit -m 'ls_shopping_center init v1.0.0'
:修改以后提交文件到本地仓库区。
![]()
git remote -v
查看远程仓库
![]()
git push Ls_shopping_center master
:将文件推送到Ls_shopping_center这个远程仓库的master分支下。
![]()
新建一个app名为user,再新建一个apps文件夹,将其设置为资源根目录文件夹(右键选择Mark Directory as,然后再选择Sources Root),而后将user移动到apps中,后进入到虚拟机中将user文件夹删除掉。
![]()
删除user文件夹
ls_shopping_center/init.py:
# (三、验证码实现)
import pymysql
pymysql.install_as_MySQLdb()
ls_shopping_center/settings.py:
......
apps/user/models.py:
from django.db import models
# Create your models here.
class Student(models.Model):
SEX_CHOICES = (
(0,'女'),
(1,'男')
) # 大写的变量代表常量,是不可变的
name = models.CharField(max_length=30,verbose_name='姓名')
age = models.IntegerField(verbose_name='年龄',null=True,blank=True) # 允许为空
sex = models.IntegerField(verbose_name='性别',null=True,blank=True,choices=SEX_CHOICES)
create_time = models.DateTimeField(max_length=30,verbose_name='创建时间',auto_now_add=True)
update_time = models.DateTimeField(auto_now=True,verbose_name='更新时间')
is_delete = models.BooleanField(default=False,verbose_name='逻辑删除')
class Meta:
db_table = 'student'
apps/user/serializers.py:
# -*- coding: utf-8 -*-
# @Time : 2022/1/24 22:51
# @Author : Lonelyroots
# @Email : Lonelyroots@qq.com
# @File : serializers.py
# @Software : PyCharm
"""
序列化器:
本质就是一个类,和模型类差不多的类,
用于json格式与模型对象进行互转以及校验数据。
定义的属性就是要参与转换的字段。
序列化器字段可以少于或多于模型类字段(属性),但字段名必须保持一致。
定义返回的数据有哪些字段
"""
# from rest_framework import serializers
#
# class StudentSerializer(serializers.Serializer):
# SEX_CHOICES = (
# (0,'女'),
# (1,'男')
# ) # 大写的变量代表常量,是不可变的
# id = serializers.IntegerField(label='ID',read_only=True)
# name = serializers.CharField(max_length=30,label='姓名')
# age = serializers.IntegerField(label='年龄', required=False) # 不需要有记录,默认为一定要有记录
# sex = serializers.IntegerField(label='性别',required=False,choices=SEX_CHOICES)
# create_time = serializers.DateTimeField(max_length=30,label='创建时间',auto_now_add=True)
# update_time = serializers.DateTimeField(auto_now=True,label='更新时间')
# is_delete = serializers.BooleanField(default=False,label='逻辑删除')
"""
序列化器:
本质就是一个类,和模型类差不多的类,
用于json格式与模型对象进行互转以及校验数据。
更简便且高效的写法
通过ModelSerializer(继承的是Serializer)
"""
from rest_framework import serializers
from .models import Student # 导入models文件中的Student类
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student # 指定序列化器映射的模型类。
fields = '__all__' # fields指定映射字段,__all__表示所有字段
# fields = ['id','name','age'] # 只映射id、name、age三个字段
# exclude = ['id'] # 映射除id字段之外的所有字段。
extra_kwargs = {
'age':{'min_value':0,'max_value':200},
} # 对字段的规则进行修改
# 追加额外的校验逻辑,自定义校验规则
def validate_name(self,value):
if 'python' not in value.lower():
raise serializers.ValidationError('name error')
return value
# # 对象级别的额外验证
# def validate(self,data):
# if 'python' not in data['name'].lower():
# raise serializers.ValidationError('name error')
# return data
apps/user/views.py:
from django.shortcuts import render
from rest_framework import viewsets
from .models import Student
from .serializers import StudentSerializer
from rest_framework.response import Response
from rest_framework.status import HTTP_404_NOT_FOUND
# Create your views here.
class StudentViewSet(viewsets.ViewSet): # 定义了一个视图集类
def list(self,request):
"""list:返回一组数据"""
# 获取所有的学生信息,返回的是模型类集合
students = Student.objects.all()
# 转json格式,这里实例化序列化器,传入要转换的模型集合,如果是多条数据一般我们加一个参数many=True
serializer = StudentSerializer(students,many=True)
# 返回响应:返回序列化后的数据
return Response(data=serializer.data)
def create(self,request):
"""创建数据"""
# 获取前端传入的数据
serializer = StudentSerializer(data=request.data) # data得到的是前端的数据,需要转模型类型,反序列化
# 校验
serializer.is_valid(raise_exception=True) # 如果校验不通过,抛一个异常
# 保存数据
serializer.save()
# 返回响应:返回序列化数据
return Response(data=serializer.data)
def retrieve(self,request,pk):
"""查看单一数据"""
try:
student = Student.objects.get(id=pk)
except Student.DoesNotExist:
return Response(status=HTTP_404_NOT_FOUND)
serializer = StudentSerializer(instance=student) # 传的是instance是序列化,传的是data是反序列化
return Response(data=serializer.data)
apps/user/urls.py:
# -*- coding: utf-8 -*-
# @Time : 2022/1/25 10:07
# @Author : Lonelyroots
# @Email : Lonelyroots@qq.com
# @File : urls.py
# @Software : PyCharm
from django.urls import path
from .views import StudentViewSet
urlpatterns = [
# 网页请求是get请求方式,新增数据是post请求方式,
path('students/',StudentViewSet.as_view({'get':'list','post':'create'})), # 如果是get请求方式,则调用StudentViewSet的list方法
path('students/<pk>/',StudentViewSet.as_view({'get':'retrieve'}))
]
文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我,可以问关于本文章的问题!以后每天都会发布新的文章,喜欢的点点关注!一个陪伴你学习Python的新青年!不管多忙都会更新下去,一起加油!
Editor:Lonelyroots
网友评论