Python Django 零基础破门而入篇(一)
前戏部分
Django是什么?
Django 是一个高级的 Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django负责处理网站开发中麻烦的部分,因此你可以专注于编写应用程序,而无需重新开发。
它是免费和开源的,有活跃繁荣的社区,丰富的文档,以及很多免费和付费的解决方案。
Django 可以使你的应用具有以下优点:
完备性 包含了基础的权限验证,有丰富的第三方组件(轮子)供使用
通用性 适用余各种BS架构的网站
安全性 (注 框架是安全的的,主要是自己写的代码有毒)
- 默认情况下,Django 可以防范许多漏洞,包括SQL注入,跨站点脚本,跨站点请求伪造和点击劫持 (请参阅 网站安全 相关信息,如有兴趣).
可扩展 因为是开源的 熟悉框架后怎么开心怎么改
可维护性 只要你不乱来,维护性决定没有问题
灵活性 跨平台
- 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