Django 30分钟入门

简介: 我8月份的时候接触Django几天,一个月后再打开未完工项目发现又是一头雾水,文档确实很详细,但是对于我来说,一大片的文字很是头疼,于是记录一下我自己的学习过程。如有错误,敬请指出。

我8月份的时候接触Django几天,一个月后再打开未完工项目发现又是一头雾水,文档确实很详细,但是对于我来说,一大片的文字很是头疼,于是记录一下我自己的学习过程。如有错误,敬请指出。

开始

环境

Python 3.7.2

Django 2.2.5

从看到后台管理界面开始

使用pycharm的专业版很快能够新建一个初始化的项目。

网络异常,图片无法展示
|

然后点击绿色三角形,just运行。

打开,你会看到一个欢迎界面:

当我们想看到后台管理系统,试图访问http://127.0.0.1:8000/admin 却显示错误的时候,其实是我们还没有默认的用户表,也没有管理员的账号密码信息

python manage.py migrate # 初始化默认表信息
python manage.py createsuperuser # 创建后台管理员账号

网络异常,图片无法展示
|

我们再访问http://127.0.0.1:8000/admin 可以看到正常的后台管理页面了!输入账号密码,就可以看到一个“简陋”的后台,一个简单的后台是不是如此简单!是不是很兴奋。

使用simpleui开源项目一键美化界面

只需两步:

  • 设置文件中包括该项目
    setting.py
INSTALLED_APPS = [
      'simpleui',
      'django.contrib.admin',
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.messages',
      'django.contrib.staticfiles',
      ...
  ]
STATIC_ROOT = os.path.join(BASE_DIR, "static")
  • pip3安装
pip3 install django-simpleui # 安装命令
python3 manage.py collectstatic #将框架静态文件拷贝项目目录的static目录

然后重新编译运行一下,再打开后台看一下。

对了,可以在setting.py里面将语言设置为中文:

LANGUAGE_CODE = "zh-hans"

网络异常,图片无法展示
|

深入

创建一个自己的表

  • 在进行这一步之前,我们需要先新建一个模块

这很容易理解,一个应用/系统按照功能需要划分成一个或多个模块。

我先新建一个usermanager一个模块:

python manage.py startapp usermanager

会发现项目中多一个名称为usermanaage文件夹。

我们稍后再去具体介绍这个项目结构。

  • 我们还需要在setting.py文件中将该模块包括进来
INSTALLED_APPS = [
    'simpleui',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
'usermanager.apps.UsermanagerConfig'# 包括进来
]
  • 定义并创建表

在该文件夹下面有usermanager/models.py文件,这个文件用来定义这个模块所需要的所有表信息(一个或多个)。每个表都是使用一个类来定义的。

from django.db import models
# Create your models here.
class User(models.Model):
    id = models.AutoField(primary_key=True)
    qq = models.IntegerField(verbose_name="QQ号码")
    password = models.CharField(verbose_name="密码", max_length=100)
class UserDomains(models.Model):
    id = models.AutoField(primary_key=True)
    userid = models.ForeignKey(User, on_delete=models.SET_NULL, blank=False, null=True, verbose_name='用户')
    domain = models.CharField(verbose_name="域名", max_length=100)
    remark = models.TextField(verbose_name="备注信息")

上面我简单定义了两个表:user和与user管理的domains表。

在命令台中,执行下面命令

python manage.py makemigrations usermanager # 为你的usermanage项目生成迁移文件(Python代码)
python manage.py sqlmigrate usermanager 0001 # 根据迁移文件生成sql代码
python manage.py migrate # 未整个项目进行是数据库迁移,这一步才是真正修改数据库的

执行第一条命令会在模块文件夹下的migration文件夹下生成一个以数字开头的迁移文件:

网络异常,图片无法展示
|

执行第二条命令会输出相应的sql语句:

hewro@hewrodeMacBook-Pro  ~/PycharmProjects/haandsome_auth  python manage.py sqlmigrate usermanager 0001 # 根据迁移文件生成sql代码
BEGIN;
--
-- Create model User
--
CREATE TABLE "usermanager_user" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "qq" integer NOT NULL, "password" varchar(100) NOT NULL);
--
-- Create model UserDomains
--
CREATE TABLE "usermanager_userdomains" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "domain" varchar(100) NOT NULL, "remark" text NOT NULL, "userid_id" integer NULL REFERENCES "usermanager_user" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE INDEX "usermanager_userdomains_userid_id_9645d39d" ON "usermanager_userdomains" ("userid_id");
COMMIT;

执行第三条命令,是在数据库中建立了相应的表。

表默认是使用sqlite数据库,也就是项目文件夹下的db.sqlite3文件。

pycharm自带了数据库查看工具,可以直接连上。

用户表的名称是模块名_类名。除此之外,一开始项目就初始化了很多表。

在后台管理界面显示该表的管理界面

我们可以在admin.py里面增加一行代码:

from django.contrib import admin
# Register your models here.
from usermanager.models import User, UserDomains
admin.site.register(User)
admin.site.register(UserDomains)

这表示,我们在后台管理界面注册了与该表相关的管理界面。(当然默认是很简陋的)

相关常用字段介绍

AutoField # 主键
ForeignKey # 外键
CharField # 字符串
TextField # 文本
IntegerField # 数字
DateTimeField # 日期

字段相关属性介绍

网络异常,图片无法展示
|

具体的函数实现如下:

def is_good(request):
    if request.method == "GET":
        domain = request.GET.get("domain")
        return_dict = {'domain': domain}
        status = 200
        try:
            query = UserDomains.objects.get(domain=domain)
            query_user = User.objects.get(id=query.userid.id)
            user = {
                "qq": query_user.qq,
                "date": query_user.date
            }
            return_dict['user'] = user
        except UserDomains.DoesNotExist:
            status = 404
        return json_response(status, "", return_dict)

网络异常,图片无法展示
|

操作数据库直接调用类的objects方法。

verbose_name # 中文名称
unique # 字段值是否唯一
default # 默认值
max_length # 最大长度

项目结构

网络异常,图片无法展示
|

  • 第一个框是项目的配置文件夹
  • setting.py 整个项目的配置基本都在这里
  • urls.py 是项目整个接口定义文件
  • 第二个框就是模块,每个模块都会有一个文件夹
  • migration文件夹:这里面的文件就是models.py 里面的数据库迁移文件,每修改并执行一次makemigrations命令,都会增加一个文件
  • admin.py:后台管理界面
  • app.py:模块定义文件
  • views.py:接口具体实现文件

写一个简单的json接口

除了后台管理,我们可能还需要定义一些自定义接口,以便外部调用。

这个接口返回数据可能是html代码(视图),也可能是json数据。

实现一个简单接口只需要两步。

  • 实现接口实现函数

为了让json返回数据更标准,我一般使用一个工具类来格式化需要返回的数据。

项目目录中新建common目录,新建utils.py

from django.http import JsonResponse
def json_response(status, msg, data=None):
    if data is None:
        data = []
    resp = dict(
        meta=dict(
            status=status,
            msg=msg,
        ),
        data=data
    )
    print(JsonResponse(resp))
    return JsonResponse(resp)

在模块的views.py(usermanager/views.py):

# Create your views here.
from common.utils import json_response
def hello(request):
    return json_response(200,"hello word",[])
  • 在urls.py中进行接口定义

至于定义接口,我们有两种方式

  • 直接在项目的urls.py里面定义
  • 在模块下面新建一个urls.py,然后在项目的urls.py里面引入这个文件

我们选择第二种方式。

在usermanager/urls.py 文件中:

from django.urls import path
from . import views
# 定义接口
urlpatterns = [
    path('hello', views.hello),
]

在项目配置文件夹下面的haandsome_auth/urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/', include('usermanager.urls')),
]

至此一个简单的接口实现成功:http://127.0.0.1:8000/user/hello

操纵数据库

更常见的是在实现接口函数的时候需要调用数据库。Django实现一种非常简单的方式。

比如,接口请求中包含一个域名地址参数,我们调用该接口,判断该域名是否存在数据库中。

常用方法如下:

# 查询
.get() #返回一条记录queryset
.filter() # 返回符合条件的queryset的列表
## 查询条件的写法就是写在函数参数里,可以接收多个条件,可以多次链式调用
# 修改
## 方法一:(get,filter都适用)
user=User.objects.get(id=1)
user.qq="4444444"
user.save()
## 方法二(只适用filter方法)
users = User.objects.filter(id=1)
users[0].update(qq="44444")
# 删除
## 先查询再删除
queryset.delete()
# 增加
b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
b.save()

上述代码还涉及到从get请求中获取参数,一看代码便知。同理POST请求的方法也是类似的,将GET换成POST即可。

目录
相关文章
|
1月前
|
Java API 数据库
Django:从入门到精通
【11月更文挑战第18天】Django是一个由Python编写的高级Web应用框架,以其简洁性、安全性和高效性而闻名。Django最初由Adrian Holovaty和Simon Willison于2003年开发,旨在简化Web应用的开发过程。作为一个开放源代码项目,Django迅速吸引了大量的开发者和用户,成为了Python Web开发领域的重要工具之一。
48 1
|
2月前
|
存储 Shell 数据库
Python编程--Django入门:用户账户(二)
Python编程--Django入门:用户账户(二)
36 2
|
2月前
|
存储 数据库 Python
Python编程--Django入门:用户账户(一)
Python编程--Django入门:用户账户(一)
23 1
|
4月前
|
前端开发 关系型数据库 Python
Django入门到放弃之分页器
Django入门到放弃之分页器
|
4月前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
300 0
|
4月前
|
开发框架 安全 数据库
解锁Django框架神秘面纱!从入门到实战,掌握这些技巧,让你的Web应用秒变高效神器!
【8月更文挑战第31天】Django 是 Python 的明星 Web 开发框架,以其高效、安全及可扩展性著称,适用于构建各类 Web 应用。本文从 Django 基础概念出发,介绍其 MTV 架构,涵盖模型(Model)、模板(Template)、视图(View)等核心组件,并通过示例代码展示实际应用。此外,还将探讨路由配置、管理界面及实战技巧,帮助读者全面掌握 Django,为高效 Web 开发打下坚实基础。
61 0
|
4月前
|
关系型数据库 MySQL 机器人
Django入门到放弃之数据库配置
Django入门到放弃之数据库配置
|
4月前
|
缓存 中间件 数据库
Django入门到放弃之缓存及信号机制
Django入门到放弃之缓存及信号机制
|
4月前
|
前端开发 数据库 数据安全/隐私保护
Django入门到放弃之Auth模块
Django入门到放弃之Auth模块
|
4月前
|
JSON 前端开发 数据安全/隐私保护
Django入门到放弃之CSRF_TOKEN
Django入门到放弃之CSRF_TOKEN