python -m pip install Django
cd 到想要创建项目的目录
django-admin startproject DjangoStudy
这时候在目录中就会有一个DjangoStudy的目录,用IDEA打开
找到setting.py修改数据库信息
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'study', # 数据库名字
'USER': 'root', # 用户名
'PASSWORD': 'xxx', # 密码
'HOST': 'ip', # HOST
'PORT': '3306', # 端口
'OPTIONS': {'charset': 'utf8mb4'}, # 打开数据库 编码格式 ——解决4字节表情无法储存问题
}
}
python manage.py startapp +'名称'
在这里我的运行命令是
python manage.py startapp app
项目是程序的第一入口,创建项目之后会有基础的setting配置文件,以及执行入口manager.py文件,这是自动生成的。至于app意思是一个项目中我可以开发多个模块,这些模块的统一入口都是项目。每个子模块可以实现独立的代码逻辑。
项目中的urls.py文件
urlpatterns = [
path('admin/', admin.site.urls),
url('app/', include('app.urls'))
]
这个文件是程序的全局url的入口,后面include意思是和别的app中的url进行拼接。每一个app都应该有自己的url.py不过和项目中的urls.py不同,其他的都要开发者手动建立,唯一项目的urls.py是自动生成的。
app中的urls.py
urlpatterns = [
url(r’^test’, UserOptionsApi.as_view())
]
class UserOptionsApi(APIView):
def get(self, request):
return HttpResponse("welcome to Django
")
python manage.py runserver
注意这种方式启动的web服务器时Django内置的web服务器,出于性能能=考虑这种方式只适用于开发测试。正式运行的网站要用WSGI。
前端请求: http://127.0.0.1:8000/child/test
可以看到项目中的url和 app中的url路径进行了合并。
项目中写法:url('child/', include('child.urls'))
app中写法:url(r'^test', UserOptionsApi.as_view())
项目中一般用include(app包名+'.'+urls)这样就会找到对应的app中的urls.py文件
app中的写法会对应到具体的视图(也就是改请求路径的响应主体)
对应数据库中的一个表
models.py增加下面的代码
class Grade(models.Model):
id = models.AutoField(verbose_name='自增id', name="id", primary_key=True)
grade_name = models.CharField(verbose_name="班级名称", name="grade_name", max_length=200)
create_time = models.DateTimeField(verbose_name='创建时间',name="create_time", auto_now_add=True) # 第一次赋值
update_time = models.DateTimeField(verbose_name='最后一次更新时间',name="update_time", auto_now=True) # 第二次赋值
python manage.py makemigrations app
Python manager.py migrate app
# 查看数据库就会看到一张表
其实没什么特殊的,这个框架把数据库的增删改查做了很多的封装,甚至增加了自动建立数据库表的功能. 其实就是ORM
object relation model. 站在我自己的立场,我个人其实不太喜欢用框架去查询数据库,自己定义python 对象,去查询数据库,对数据库的连接做个封装,然后数据库查出来的数据 手动封装为python 对象,最简单了。 理解这种框架的设计初衷,但是好像并没有减轻工作量。。。因为要按照既定的要求去写代码,会导致学习成本升高。。。。