[Django-1] 快速建立项目

初始化Django

    • 初始化项目
    • 创建app
    • 项目和app的关系
    • 下面的代码一般放在view.py中
    • 项目启动
    • 项目中中的urls.py和app中的urls.py的关系
    • Model
    • Django生成表
    • 查询
    • 理解

初始化项目

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字节表情无法储存问题
    }
}

创建app

python manage.py startapp +'名称'
在这里我的运行命令是
python manage.py startapp app

项目和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())
]

下面的代码一般放在view.py中

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路径进行了合并。

项目中中的urls.py和app中的urls.py的关系

  1. 写法不同
项目中写法:url('child/', include('child.urls'))
app中写法:url(r'^test', UserOptionsApi.as_view())
项目中一般用include(app包名+'.'+urls)这样就会找到对应的app中的urls.py文件
app中的写法会对应到具体的视图(也就是改请求路径的响应主体)
  1. 相关性
    前者和后者的路径会拼接起来

Model

对应数据库中的一个表
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)  # 第二次赋值

Django生成表

python manage.py makemigrations  app
Python manager.py migrate app
# 查看数据库就会看到一张表

查询

  1. modelClass.objects.all()->QuerySet
    返回可迭代对象, 类似于select * from table
  2. modelClass.objects.filter(字段名称=value)->QuerySet
  3. modelClass.objects.get(字段名称=value)->modelClass
    Get 只能返回一条数据,如果未找到数据则抛出异常, filter则不会
  4. modelClass.objects.values(列1,列2)->list(dict)
    返回的不是modelClass 而是字典

理解

其实没什么特殊的,这个框架把数据库的增删改查做了很多的封装,甚至增加了自动建立数据库表的功能. 其实就是ORM
object relation model. 站在我自己的立场,我个人其实不太喜欢用框架去查询数据库,自己定义python 对象,去查询数据库,对数据库的连接做个封装,然后数据库查出来的数据 手动封装为python 对象,最简单了。 理解这种框架的设计初衷,但是好像并没有减轻工作量。。。因为要按照既定的要求去写代码,会导致学习成本升高。。。。

你可能感兴趣的:(Django,从零到1,django,python,后端)