ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django.2

2019-06-07 16:02:16  阅读:207  来源: 互联网

标签:Django.2 models py name grade django delete


首先使用pycharm创建django工程

在工程文件内的settings.py文件中修改配置

  • DATABASES中为连接的数据库(mysql数据库方式)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'HelloDjango',(数据库的名称,应提前创建好)
        'USER': 'root',
        'HOST': '127.0.0.1',
        'PASSWORD': 'your password',
        'PORT': '3306',
    }
}
    • 需要在__init__.py文件中添加引擎
import pymysql

pymysql.install_as_MySQLdb()
  • 若想所有人访问
ALLOWED_HOSTS = [
    "*"
]
  • 时区和语言
# 调整时区和语言
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

创建项目文件(例App)

  • 打开终端
    • python manage.py startapp App

  • App项目创建好后,需要在工程文件的settings.py中注册才可以使用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'App'
]
  • 还要在工程文件的urls.py中添加路由
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app/', include('App.urls')),
]

需要在App中自行创建urls.py文件,手动添加相应想要的路由

urlpatterns = [
    url(r'^addgrade/', views.add_grade),
    url(r'^getgrades/', views.get_grades),

    url(r'^addstudent/', views.add_student),
    url(r'^getgrade/', views.get_grade),
    url(r'^getstudent/', views.get_student),
]

(这样相应的路由就对应了相应的视图函数,比如:/app/addgrade/所对应的视图函数名称就是add_grade)

创建模型

class Grade(models.Model):
    g_name = models.CharField(max_length=32)
class Student(models.Model):
    s_name = models.CharField(max_length=32)
    s_age = models.IntegerField(default=18)
    s_grade = models.ForeignKey(Grade)
  • 执行迁移文件
    • python manage.py makemigrations
    • python manage.py migrate
    • (迁移后会在连接的数据库中生成模型映射表)

操作视图函数

def add_grade(request):

    grade = Grade() #实例化模型

    grade.g_name = "Python%d" % random.randrange(1000) #生成对象

    grade.save() # 将对象保存到数据库中

    return HttpResponse("添加成功%s" % grade.g_name)
  • 获取模型中的所有集合
grades = Grade.objects.all()

渲染模版:

# request:请求, 'Grade.html':渲染的模版名称, context:传递的参数
return render(request, 'Grade.html', context={"grade": grade})

 逻辑删除

# 自定义模型管理器
class TeachManager(Manager):

    def get_queryset(self):

        queryset = super().get_queryset().filter(is_delete=False)
        # 将filter条件查询时,自动加上条件,即查询is_delete为false的对象

        return queryset

class Goods(models.Model):

    g_name = models.CharField(max_length=32)
    g_price = models.FloatField(default=1)

    is_delete = models.BooleanField(default=False)
    # 设置is_delete字段,默认值为False,即为0,不删除

    def delete(self, using=None, keep_parents=False):
        self.is_delete = True
        self.save()
        # 当调用删除时,将is_delete值更改为True,即为1,删除(逻辑删除,数据库里并没有删除)

    objects = TeachManager()

一对一(OneToOneField

class User(models.Model):
    u_name = models.CharField(max_length=32)

class Vip(models.Model):
    v_level = models.IntegerField(default=0)
    v_user = models.OneToOneField(User, on_delete=models.PROTECT) # 不允许级联删除,即不允许删除用户从而删除vip表中对应的数据

# models.CASCADE  默认值
# models.PROTECT  保护模式
# models.SET_NULL  置空模式
# models.SET_DEFAULT  置默认值
# models.SET()    删除的时候重新动态指向一个实体

一对多(ForeignKeyField

  • 想要获取一所对应的多的集合,直接用  从表_set  即可

多对多(ManyToManyField)

class User(models.Model):
    u_name = models.CharField(max_length=32)
    
class Goods(models.Model):
    g_name = models.CharField(max_length=32)
    g_users = models.ManyToManyField(User)
    
# 自动以两表的逐主键为字段创建一张表
# 依旧有主从表关系(主表为User,从表为Goods)
# goods_list = user.goods_set.all()
# users_list = goods.g_users.all()

 

标签:Django.2,models,py,name,grade,django,delete
来源: https://www.cnblogs.com/zbcdamao/p/10988346.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有