• Python Django 零基础破门而入篇(一)


    前戏部分

    Django是什么?

    Django 是一个高级的 Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django负责处理网站开发中麻烦的部分,因此你可以专注于编写应用程序,而无需重新开发。
    它是免费和开源的,有活跃繁荣的社区,丰富的文档,以及很多免费和付费的解决方案。

    Django 可以使你的应用具有以下优点:

    完备性 包含了基础的权限验证,有丰富的第三方组件(轮子)供使用

    通用性  适用余各种BS架构的网站

    安全性  (注  框架是安全的的,主要是自己写的代码有毒)

    默认情况下,Django 可以防范许多漏洞,包括SQL注入,跨站点脚本,跨站点请求伪造和点击劫持 (请参阅 网站安全 相关信息,如有兴趣).

    可扩展   因为是开源的 熟悉框架后怎么开心怎么改

    可维护性  只要你不乱来,维护性决定没有问题

     模型视图控制器 (MVC) 模式

    灵活性  跨平台

    Linux,Windows和Mac OsX 上运行应用程序

    更多详细信息请见: https://developer.mozilla.org/zh-CN/docs/learn/Server-side/Django/Introduction

    1.打开pycharm 这句是废话,厉害的同学可以用  cmd 命令手动模式

    2.新建django 项目  OpenTheDoor

     

    3.项目结构说明

    4.修改项目 settings.py  配置项目语言为中文、修改时区   

    LANGUAGE_CODE = 'zh-hans'  # 设置为中文
    TIME_ZONE = 'Asia/Shanghai'  # 设置时区
    USE_I18N = True  # 默认为True,是否启用自动翻译系统
    USE_L10N = True  # 默认False,以本地化格式显示数字和时间
    USE_TZ = False  # 默认值True。若使用了本地时间,必须设为False

    5.设置静态资源目录

    STATIC_URL = '/static/'
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )

    6.写第一个 models.py (数据库表,实体类)

      安装   django-multiselectfield   用于实现 喜欢吃水果 多选

    pip install django-multiselectfield

           安装  Pillow  实现imageFile字段

    pip install Pillow
    from django.db import models
    import datetime
    import uuid
    
    from django.contrib.auth.models import User
    # Create your models here.
    from django.utils.html import format_html
    from django.db.models import IntegerField, Model
    from django.core.validators import MaxValueValidator, MinValueValidator
    import random, os
    from django.contrib.auth.models import AbstractUser
    from django.db import models
    # 安装 pip install django-multiselectfield
    from multiselectfield import MultiSelectField
    
    STATE_GENDER = ((0, ""), (1, ""), (2, "保密"))
    ROLS_FRUIT = ((0, '西瓜'), (1, '草莓'), (2, '菠萝'))
    
    
    
    # 大佬信息
    class bossInfo(models.Model):
        name = models.CharField(verbose_name="姓名(文本类型)", max_length=225, null=False, blank=False, default="")
        # 课后练习 如何控制输入的 age 大于20 小于100
        age = models.IntegerField(verbose_name="年龄(数字类型)", null=False, blank=False, default=1)
        gender = models.CharField(verbose_name="性别(单选)", max_length=225, null=False, blank=False, default=1,
                                  choices=STATE_GENDER)
        likeFruit = MultiSelectField(verbose_name="喜欢的水果(多选)", choices=ROLS_FRUIT)
        #headImage = models.ImageField(verbose_name="个人写真(图片文件)", null=False, blank=False, default=None)
        userUrl = models.URLField(verbose_name="个人主页(URL地址)", null=False, blank=False, default=None)
        desc = models.TextField(verbose_name="描述(多行文本)", max_length=1000, null=False, blank=False, default=None)
        # 通过model.  的提示在扩展8个字段  自由发挥
        createTime = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
        lastTime = models.DateTimeField(auto_now=True, verbose_name="修改时间")
        creator = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name="创建者",
                                    related_name="bossinfo_creator")
        editor = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name="修改者",
                                   related_name="bossinfo_editor")
    
        class Meta:
            verbose_name = "大佬信息管理"
            verbose_name_plural = "大佬信息管理"
    
        def __str__(self):
            return self.name

    7.配置 admin.py

    from django.contrib import admin
    from app import models
    
    # Register your models here.
    admin.site.site_header = "大佬管理"
    admin.site.site_title = "大佬管理后台管理"
    
    
    @admin.register(models.bossInfo)
    class appManagerAdmin(admin.ModelAdmin):
        fields = (
            "name", "age", "gender",
            "likeFruit", "userUrl", "desc")
        list_display = (
            "name", "age", "gender",
            "likeFruit", "userUrl",
            "createTime",
            "lastTime",
            "creator", "editor")
        list_display_links = ("name",)
        exclude = ("createTime", "creator", "editor")
        search_fields = ("name",)
        list_filter = ("gender", "likeFruit")
        model_icon = "fa fa-tag"
        list_per_page = 20
        ordering = ["-id"]
    
        def save_model(self, request, obj, form, change):
            if form.is_valid():
                if change:
                    obj.editor = request.user
                else:
                    obj.creator = request.user
                    obj.editor = request.user
                    obj.save()
            super().save_model(request, obj, form, change)

    8.运行效果

     

    9.安装django-simpleui包

    pip install django-simpleui

      django-simpleui 详细文档以及配置说明

      https://github.com/newpanjing/simpleui/blob/master/QUICK.md

    10.项目目录下 settings.py 配置

    11.再次运行项目查看效果

     

    12.写第一个HTTP 请求 views.py

           app-->views.py  (有CBV 和 FBV) 目前我们先学习FBV

      FBV(function base views) 就是在视图里使用函数处理请求。

      CBV(class base views) 就是在视图里使用类处理请求。

    from django.shortcuts import render
    from django.http import HttpResponse
    
    
    # Create your views here.
    
    # 第一个请求
    def helloWorld(request):
        return HttpResponse("very nice")

    13.项目文件夹OpenTheDoor-- urls.py

    from django.contrib import admin
    from django.urls import path
    from app import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('helloWorld/', views.helloWorld),
    ]

    14. 运行效果

     再次修改views.py  让请求返回html页面

    from django.shortcuts import render
    from django.http import HttpResponse
    # Create your views here.
    # 第一个请求
    # 直接返回响应体
    def helloWorld(request):
        return HttpResponse("very nice")
    
    # 返回html页面
    def helloH5(request):
        return render(request, "helloH5.html")

     urls.py 配置如下

    from django.contrib import admin
    from django.urls import path
    from app import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('helloWorld/', views.helloWorld),
        path('helloH5/', views.helloH5),
    ]

    运行效果

    15.最终项目结构如下

    16.常用命令

    数据库迁移
    python manage.py makemigrations
    python manage.py migrate
    python manage.py createsuperuser
    
    测试环境
    PUBTYPE=app ENV=test python3 manage.py makemigrations --settings=项目名称.test_settings
    PUBTYPE=app ENV=test python3 manage.py migrate --settings=项目名称.test_settings
    
    PUBTYPE=app ENV=test python3 manage.py runserver 0.0.0.0:80 --settings=项目名称.test_settings
    
    PUBTYPE=app ENV=test python3 manage.py createsuperuser --settings=项目名称.test_settings
    
    
    生产环境
    PUBTYPE=app ENV=production python3 manage.py makemigrations --settings=项目名称.prd_settings
    PUBTYPE=app ENV=production python3 manage.py migrate --settings=项目名称.prd_settings
    
    PUBTYPE=app ENV=production python3 manage.py runserver 0.0.0.0:8000 --settings=项目名称.prd_settings
    
    
    PUBTYPE=app ENV=production python3 manage.py createsuperuser --settings=landlorde.prd_settings
    
    
    新建app
    python manage.py startapp xxx
    
    安装requirement.txt
    pip install -r requirements.txt
    
    生成requirement.txt
    pip freeze > requirements.txt

    17. 知识点

    settings.py 配置说明

    DEBUG

              默认值是True。在本地开发测试环境下设置DEBUG=True可以显示bug信息,便于开发者找出代码错误所在。当你在部署项目在生产环境时,请切记设置DEBUG=False。因为生成环境下打开Debug会暴露很多敏感设置信息(比如数据库密码)。注意: 当你设置                      DEBUG=False, 你一定要设置ALLOWED_HOSTS选项, 否则会抛出异常。

    ALLOWED_HOSTS

              默认值为空[]。设置ALLOWED_HOSTS是为了限定用户请求中的host值,以防止黑客构造包来进行头部攻击。该选项正确设置方式如下:

      • DEBUG=True: ALLOWED_HOSTS可以为空,也可设置为['127.0.0.01', 'localhost']
      • DEBUG=False: ALLOWED_HOSTS=['46.124.78.xx', 'www.baidu.com','127.0.0.1']

    INSTALLED_APPS

              用于增删一个项目(Project)所包含的应用(APP)。只有对列入此项的APP, Django才会生成相应的数据表。

    国际化(语言与时间)

    LANGUAGE_CODE = 'zh-hans' #设置为中文
    TIME_ZONE = 'Asia/Shanghai' # 设置时区
    USE_I18N = True # 默认为True,是否启用自动翻译系统
    USE_L10N = True # 默认False,以本地化格式显示数字和时间
    USE_TZ = False # 默认值True。若使用了本地时间,必须设为False

    18.学习练手项目 骚操作这里面都有

      https://www.django.cn/course/course-2.html

  • 相关阅读:
    Java——字符串操作
    算法——Java实现队列
    算法——Java实现栈
    算法——线性表之链式存储结构
    算法——线性表之顺序存储结构
    Java——单双引号的区别
    Hystrix源码解析
    Eureka源码探索(一)-客户端服务端的启动和负载均衡
    dubbo源码研究(一)
    dubbo-springboot入门级demo
  • 原文地址:https://www.cnblogs.com/wangcongxing/p/13549389.html
Copyright © 2020-2023  润新知