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

原文地址:https://www.cnblogs.com/wangcongxing/p/13549389.html