• 使用Django搭建web应用程序(一)


    Django的Web框架是可以用来开发交互式网站的工具,它能够响应网页请求,更轻松的读写数据库、管理用户等。

    1. 在Django中创建项目:

    django-admin  startproject 项目名 . 

      命令行最后的句点一定带上,否则部署应用程序时将遭遇一些配置问题。如果忘记使用句点,可以将创建的文件和文件夹删除重新运行

    2. 创建数据库:

    python manage.py migrate

      我们将修改数据库成为迁移数据库,后面如果对数据库中的模型进行修改后,也要执行迁移操作。

    执行python manage.py runserver

    此时就可以打开http://127.0.0.1:8000查看项目是否成功展示了页面

    3. 创建应用程序:

    python manage.py startapp 应用名

      该命令创建应用程序所需的基础设施 ,新增应用名同名的文件夹,其中包含models.pyadmin.pyviews.py 。

    4. 定义模型:

    打开models.py 在其中创建自己的模型

     1 from django.db import models
     2 
     3 # Create your models here.
     4 
     5 
     6 class Pizza(models.Model):
     7     """定义Pizza模型"""
     8     name = models.CharField(max_length=200)
     9     date_added = models.DateTimeField(auto_now_add=True)
    10 
    11     def __str__(self):
    12         """返回模型的字符串表示"""
    13         return self.name
    14 
    15 
    16 class Topping(models.Model):
    17     """定义Topping模型"""
    18     pizza = models.ForeignKey(Pizza, on_delete=models.DO_NOTHING)
    19     name = models.TextField()
    20     date_added = models.DateTimeField(auto_now_add=True)
    21 
    22     def __str__(self):
    23         """返回模型的字符串表示"""
    24         return self.name

    5. 激活模型:

    要使用模型,必须让Django将应用程序包含到项目中。打开settings.py,在INSTALLED_APPS下添加自己的应用名。

    • 接下来要让Django修改数据库,使其能够存储模型相关的信息。

    python manage.py makemigrations 应用名

    命令makemigrations让Django去欸的那个该如何修改数据库,存储与我们新定义的模型相关联的数据。

    输入表明Django创建了一个名为0001——initial.py的迁移文件,这个而文件在数据库中为模型创建一个表。

    • 然后用这个迁移进行修改(创建过的)数据库

    python manage.py migrate
    这个命令上面执行过,第一次执行为创建数据库,后面再执行的时候就是修改

    6. 管理网站

    • 创建超级用户

    python manage.py createsuperuser

    • 向管理网站注册模型

    修改admin.py

    1 from django.contrib import admin
    2 
    3 # Register your models here.
    4 from pizzas.models import Pizza, Topping
    5 
    6 admin.site.register(Pizza)
    7 admin.site.register(Topping)

    此时访问http://127.0.0.1:8000/admin/时,就可以使用超级管理员,来进行数据修改了

    过程中遇到的问题

    1.

    python manage.py makemigrations learning_logs

    在models.py中创建了两个数据库表模型,第二个表引用第一个表的id作为外键,

    topic = models.ForeignKey(Topic)

    修改数据库模型时提示报错:

    报错内容:

      File "C:Userschenhao.jialearning_logsmodels.py", line 14, in <module> class Entry(models.Model):

      File "C:Userschenhao.jialearning_logsmodels.py", line 16, in Entry topic = models.ForeignKey(Topic)

    TypeError: __init__() missing 1 required positional argument: 'on_delete'

    分析:

    看报错提示是因为在topic = models.ForeignKey(Topic)中少了一个参数,

    在这行关联语句中加入on_delete=models.DO_NOTHING

    原因如下:

    django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常:
    TypeError: init() missing 1 required positional argument: ‘on_delete’

    on_delete各个参数的含义如下:

    on_delete=None,               # 删除关联表中的数据时,当前表与其关联的field的行为
    on_delete=models.CASCADE,     # 删除关联数据,与之关联也删除
    on_delete=models.DO_NOTHING,  # 删除关联数据,什么也不做
    on_delete=models.PROTECT,     # 删除关联数据,引发错误ProtectedError
    # models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)
    on_delete=models.SET_NULL,    # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
    # models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')
    on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
    on_delete=models.SET,         # 删除关联数据,

    2.

    增加完on_delete参数之后,再次修改模型时提示:

    You are trying to add a non-nullable field 'topic' to entry without a default; we can't do that (the database needs something to populate existing rows).

    Please select a fix:

     1) Provide a one-off default now (will be set on all existing rows with a null value for this column)

     2) Quit, and let me add a default in models.py

    原因分析:

    因为之前数据库中已经有数据了,现在加了一个字段,如果这个字段没有默认值,它不知道该填什么,所以会报错

    因此只要先给他一个任意的默认值(数据类型要能对应上),然后python manage.py makemigrations XXX修改数据库,再python manage.py migrate迁移数据库。

    再将default删去,再次修改数据库-迁移数据库就OK了。

    ——————待续——————

    最懒的人就是整天忙得没时间学习、反思、成长的人。
  • 相关阅读:
    cookie和session会话技术
    hdoj 1176 免费馅饼
    nyoj 14 会场安排问题
    hdoj 1575 Tr A
    poj 1163 The Triangle
    hdoj 2157 How many ways??
    贪心Poj1328
    贪心 序列
    差分约束Poj 3169 Layout
    差分约束Poj3159 Candies
  • 原文地址:https://www.cnblogs.com/jockeyhao/p/14607974.html
Copyright © 2020-2023  润新知