python + django 搭建页面

Python3.7 + Django3.2 + MySQL8.0

python + django 搭建页面_第1张图片

文章目录

  • Python3.7 + Django3.2 + MySQL8.0
  • 一、创建一个web服务器
  • 二、创建app(web应用程序)
    • 1.启动网站试试
    • 2.注册app
    • 3.建立表结构(mysql数据库)
    • 4.登录页面
  • 总结


一、创建一个web服务器

django-admin startproject pyweb

pyweb 文件下包含一个同名文件夹和manage.py
manage.py可以理解是网站的管理脚本,同名文件夹功能可以理解为对网站内容的控制

二、创建app(web应用程序)

python manage.py startapp web

1.启动网站试试

python manage.py runserver

python + django 搭建页面_第2张图片提示了错误,但是依然可以访问网页,我们只需要退出后输入

python manage.py migrate #根据提示重建表结构

python + django 搭建页面_第3张图片再重新启动后可成功访问(不提示重建表结构)
python + django 搭建页面_第4张图片

2.注册app

在pyweb\pyweb\settings.py中注册app,添加’web.apps.WebConfig’的字段:

# Application definition
#应用定义
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #注册app,连接的是web/apps.py 文件中的WebConfig类(创建的名字不同,类名也不同)
    'web.apps.WebConfig',  
]

Django设计app的核心理念是功能的模块化和可重用。

3.建立表结构(mysql数据库)

首先要打开数据库,建立一个本次项目的数据库
create database web;
配置数据库(修改pyweb\pyweb\settings.py配置信息):

注释掉原始数据库配置,删除数据文件pyweb\db.sqlite3
# Database 
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': BASE_DIR / 'db.sqlite3',
#     }
# }


#mysql  database 
# 添加的内容
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'web',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': 'root'  
    }
}

保证这两个操作mysql 的模块已经安装

pip install mysqlclient
pip install pymysql

在\pyweb\web\models.py中建表:
文件中每个class相当于单个数据库表,每个属性也是这个表中的一个字段。 属性名就是字段名,它的类型(例如 #CharField )相当于数据库的字段类型 (例如 varchar )。

from django.db import models

# Create your models here.
#文件中每个class相当于单个数据库表,每个属性也是这个表中的一个字段。 属性名就是字段名,它的类型(例如 #CharField )相当于数据库的字段类型 (例如 varchar )。
class Company(models.Model):
    """公司表"""
    #ID 字段可以自动生成
    companyname = models.CharField(verbose_name='公司名称',max_length=64,null=False)

class Userinfo(models.Model):
    """人员信息"""
    name = models.CharField(verbose_name='姓名',max_length=32)
    password = models.CharField(verbose_name='密码',max_length=64)
    age = models.IntegerField(verbose_name='年龄')
    sign = models.CharField(verbose_name='签名',max_length=255)

    # 绑定外键并级联删除,删除公司时删除属于公司的所有人
    companyinfo = models.ForeignKey(verbose_name='公司',to='company',to_field='id',on_delete=models.CASCADE)
    # # 绑定外键删除置空
    # companyinfo = models.ForeignKey(to='companyname',to_field='id',null=True,blank=True,on_delete=models.SET_NULL)
    
    gender_choices = (
            (1,'男'),
            (2,'女'),
        )
    gender = models.SmallIntegerField(verbose_name='性别',choices = gender_choices)

生成数据表:

1、生成迁移文件(在终端执行如下命令)

python manage.py makemigrations

2、执行迁移文件(在终端执行如下命令)

python manage.py migrate

得到如下表,除了我们要的两表,其他表都是系统生成的:
python + django 搭建页面_第5张图片在web_userinfo表中插入几条记录,登录页面的验证主要用到name和password字段:

insert into web_userinfo(name,password,age,sign,gender,companyinfo_id) values ('肖战','00000',20,'haha',2,1);
insert into web_userinfo(name,password,age,sign,gender,companyinfo_id) values ('南藤','11111',29,'萨瓦迪卡',2,2);
insert into web_userinfo(name,password,age,sign,gender,companyinfo_id) values ('giao','22222',29,'开心你就拍手',2,2);

4.登录页面

先放出页面效果

关联页面要用到pyweb\pyweb\urls.py 和 pyweb\web\views.py 两个文件(假设我们已经有了login.html页面)。
1.先做网站目录链接到函数的部分url.py

from django.contrib import admin
from django.urls import path

# 必须先导入web/views
from web import views

urlpatterns = [
    # path('admin/', admin.site.urls),
    # 把网站地址和要执行函数建立对应关系
    path('login/',views.login),
]

2.再把函数和login.html页面相关连

from django.shortcuts import render
#导入重定向redirect为了测试
from django.shortcuts import redirect
#导入models为了操作数据库
from web import models
# Create your views here.

def login(request):
    return render(request,'login.html')

3.做一个login.html页面,我们要先建一个templates文件夹来放html文件(还有static文件夹来放有关html的文件,例如img,css,js等),就像这样,然后login.html新建在templates文件夹下即可。
python + django 搭建页面_第6张图片
简单构建一个页面,表单form中添加三个div,并增大间距代码让login.html结构更清晰

DOCTYPE html>
<html>
<head>
    <title>Japan_is_shittitle>
head>
<body>
    <div>
        <h2>用户登陆h2>
        
        <form method="post">
            
            {% csrf_token %}



            <div>
                <label>用户名label>
                <div>
                    <input type="" name="user">
                div>
            div>



            <div>
                <label>密码label>
                <div>
                    <input type="" name="pwd">
                div>
            div>



            <div>
                <div>
                    
                    <span>{{error_msg}}span>
                    <button>登录button>
                div>
            div>




        form>
    div>
body>
html>

到这为止,访问http://127.0.0.1:8000/login/就可以访问到login.html页面。
python + django 搭建页面_第7张图片

4.接下来在views.py的login函数中写登录的逻辑

from django.shortcuts import render,redirect
#导入models为了操作数据库
from web import models
# Create your views here.


def login(request):
    # 如果请求方式是get,就返回本页面,否则(post方式)就获取页面提交的内容
    # 和数据库的用户名/密码做对比,相同就登录,不同就报错
    if request.method == "GET":
        return render(request,'login.html')
    #user对应html文件输入框,pwd同理
    name = request.POST.get('user') 
    pwd = request.POST.get('pwd')
    #从数据库web中的web_userinfo表中取出所有数据
    data_list = models.Userinfo.objects.all()
    # 从每条数据中取得name和password字段进行比较
    for data in data_list:
        if data.name == name and data.password ==pwd:
            # 登录成功跳转到我主页
            return redirect('https://blog.csdn.net/qq_43504837')
    # 登录不成功就返回本页面,并给出错误信息
    return render(request,'login.html',{"error_msg":"用户名或错误"})

让我们再看看数据库web_userinfo表中的数据,这时用他们的name和password就可以登录了(指跳转至我主页)
python + django 搭建页面_第8张图片

总结

下篇把登录页面的css实现一下,加入用户认证和图片验证码。
背景图片链接
孤勇者 双城之战 金克丝 厚涂 孤勇者4k壁纸—原图
孤勇者 双城之战 金克丝 厚涂 孤勇者4k壁纸—使用图

你可能感兴趣的:(django,django,python,数据库)