Python之Django实例--可重用注册登录系统(一)

1. 项目开始前的思考

#路由配置
urlpattern = [
	path('/register/', views.register),
	path('/login/', views.login),
	path('/logout/', views.logout),
]
#视图配置(重点)
#数据库模型配置Model(id,
class User:
	id, name, password, email, create_time, update_time,last_time(最后一次登录的时间),gender, province
#模板Template: register.html,login.html,index.html

2. 第一步: 搭建项目环境

2.1 创建Django项目loginRegister

在这里插入图片描述

2.2 创建app

python manage.py startapp login
在这里插入图片描述

2.3 创建时区和语言

# filename: loginRegister/settings.py
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

在这里插入图片描述

2.4 数据库表生成

 python manage.py makemigrations   ##生成迁移脚本
 python manage.py migrate # 将迁移脚本的内容写入数据库并创建数据库表
 python manage.py createsuperuser # 创建后台登录的超级用户

在这里插入图片描述
在这里插入图片描述

2.5 启动开发服务器

方法一: 命令启动

python manage.py runserver 9999   ##端口默认8000,可以指定

在这里插入图片描述
方法二: 配置Django Server
在这里插入图片描述
在这里插入图片描述

2.6 浏览器访问,检测是否成功

访问网址: http://127.0.0.1:8000
访问网址: http://127.0.0.1:8000/admin
在这里插入图片描述
在这里插入图片描述
登录成功
在这里插入图片描述

2.7 git提交项目代码到本地仓库

检测git是否安装成功
在这里插入图片描述
安装.ignore插件
在这里插入图片描述
忽略提交的代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
git提交代码

git init
# 安装插件.ignore, 并生成python上传git项目需要忽略内容的文件.gitignore
git add * # 添加修改到暂存区
git commit -m "搭建项目开发环境" # 将暂存区的代码提交到本地git仓库
git log # 查看历史提交记录

在这里插入图片描述
在这里插入图片描述

3. 第二步: 设计数据库模型

3.1 设计过程

- 作为一个用户登录和注册项目,需要保存的都是各种用户的相关信息。很显然,我们至少需要一张用户
	表User,在用户表里需要保存下面的信息:
	用户名(name): 必填,最长不超过128个字符且唯一(unique)
	密码(password): 必填,最长不超过256个字符
	邮箱地址(email): 使用Django内置的邮箱类型且唯一
	性别(gender): 性别, 使用choice,只能选择男或者女或者未知,默认为未知;
	创建时间(create_time): 用户创建时间
		注意点: auto_now_add=True时为添加时的时间,更新对象时不会有变动。
	修改时间(modify_time):用户最后一次修改时间
		注意点: auto_now=True无论是你添加还是修改对象,时间为你添加或者修改的时间。
	最后一次登录时间(last_login_time): 最后一次登录时间
		注意点:null=True的话,数据库中该字段是NULL,即允许空值
		注意点:blank=False(默认)的话,字段没被赋值则会抛错;和数据验证(表单验证等)有关.

3.2 模型代码

# login/models.py
from django.db import models
# Create your models here.
# appname_siteuser
class SiteUser(models.Model):
	"""用户的数据库模型,注册/登录需要"""
	gender_choice = (
	(0, "未知"),
	(1, "男"),
	(2, "女"),
	)
	name = models.CharField(max_length=128, unique=True, verbose_name="用户名")
	password = models.CharField(max_length=256, verbose_name="密码")
	email = models.EmailField(unique=True, verbose_name="电子邮箱")
	gender = models.IntegerField(choices=gender_choice, default=0,verbose_name="性别")
	# auto_now_add=True时为添加时的时间,更新对象时不会有变动。
	# auto_now=True无论是你添加还是修改对象,时间为你添加或者修改的时间。
	create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
	modify_time = models.DateTimeField(auto_now=True, verbose_name="最后一次修改时间")
	# null针对数据库层面的, blank针对表单的
	last_login_time = models.DateTimeField(null=True, blank=True,verbose_name="最后一次登录时间")
	
	def __str__(self):
		return self.name    ##为了显示美观
	class Meta:
		verbose_name = "网站用户管理"
		verbose_name_plural = verbose_name

在这里插入图片描述

3.4 设置数据库后端

Django支持MySQL, Sqlite, oracle等数据库, 此处选择默认的sqlite,不做修改。

3.5 注册app

# loginRegister/settings.py
INSTALLED_APPS = [
	'django.contrib.admin',
	'django.contrib.auth',
	'django.contrib.contenttypes',
	'django.contrib.sessions',
	'django.contrib.messages',
	'django.contrib.staticfiles',
	'login', # 修改的内容
]

在这里插入图片描述

3.6 生成迁移脚本并写入数据库

$ python manage.py makemigrations   ##生成迁移脚本
$ python manage.py migrate # 将迁移脚本的内容写入数据库并创建数据库表
$ python manage.py createsuperuser # 创建后台登录的超级用户

在这里插入图片描述

3.7 测试是否成功

3.7.1 测试数据库信息

打开数据库文件db.sqlite3, 查看是否有数据库表login_siteuser,如果有,则操作成功。
在这里插入图片描述

3.7.2 命令测试并查看网页更新内容
pip install ipython

在这里插入图片描述
在这里插入图片描述

3.8 数据库模型后台管理

#alt+回车自动导入模块
#login/admin.py
from django.contrib import admin
from login.models import SiteUser
# Register your models here.
##后台管理设置信息
class SiteUserAdmin(admin.ModelAdmin):
    list_display = ['name','gender','email']
    list_display_links = ['name']   ##可以点击进入的
    list_filter = ['gender','create_time']
    list_per_page = 10
admin.site.register(SiteUser,SiteUserAdmin)  ##将后台和模型关联

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.9 git 提交

git add *
git commit -m "add SiteUser admin management"
git log

在这里插入图片描述

4. 路由与视图函数框架搭建

4.1 路由设计

在这里插入图片描述

4.2 访问策略

未登录人员,不论是访问index还是login和logout,全部跳转到login界面
已登录人员,访问login会自动跳转到index页面
已登录人员,不允许直接访问register页面,需先logout
登出后,自动跳转到login界面

4.3 路由配置

4.3.1 主路由配置文件

#lgoinRegister/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('login.urls'))  #添加的行,如果没有前缀,访问子路由配置文件
]

在这里插入图片描述

4.3.2 子路由配置文件(login子应用的)
#login/urls.py(新建的)
from django.contrib import admin
from django.urls import path, include
from login import views
urlpatterns = [
    path('index/', views.index, name='index'),    ##导入url,并关联view
    path('login/', views.login, name='login'),
    path('register/', views.register, name='register'),
    path('logout/', views.logout, name='logout'),
]

在这里插入图片描述

4.3.3 视图函数的配置
#login/views.py
from django.shortcuts import render, redirect
# Create your views here.
def index(request):
    pass
    return render(request, 'login/index.html')
def login(request):
    pass
    return render(request, 'login/login.html')
def register(request):
    pass
    return render(request, 'login/register.html')
def logout(request):
    pass
    # redirect: 重定向(跳转),
    return redirect('/login/')

在这里插入图片描述

4.3.4 模板template的配置
#templates/login/index.html(新建)
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>首页</title>
</head>
<body>
<h1>这是首页的模拟界面</h1>
</body>
</html>


#templates/login/login.html(新建)
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>用户登录</title>
</head>
<body>
<h1>用户登录</h1>
<form>
	用户名: <input type="text" placeholder="username"><br/>
	密码: <input type="password" placeholder="password"><br/>
	<input type="submit" value="登录">
</form>
</body>
</html>


#templates/login/register.html(新建)
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>注册界面</title>
</head>
<body>
<h1>用户注册</h1>
<form>
	用户名: <input type="text" placeholder="username"><br/>
	电子邮箱: <input type="email" placeholder="email"><br/>
	密码: <input type="password" placeholder="password"><br/>
	确认密码: <input type="password" placeholder="password"><br/>
	<input type="submit" value="注册">
</form>
</body>
</html>

在这里插入图片描述

4.3.5 测试是否成功
	访问网址: http://127.0.0.1:8000/index/
	访问网址: http://127.0.0.1:8000/login/
	访问网址: http://127.0.0.1:8000/register/

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.3.6 git 提交

在这里插入图片描述
在这里插入图片描述

5. 前端界面设计与优化

5.1 模板参考官网

现成的开源前端CSS框架,Bootstrap4就是最好的CSS框架之一!戳一下了解更多
Bootstrap核心汇总:
入门模板: https://v4.bootcss.com/docs/getting-started/introduction/
栅格系统: https://v4.bootcss.com/docs/layout/grid/
表单组件: https://v4.bootcss.com/docs/components/forms/
警告框: https://v4.bootcss.com/docs/components/alerts/

5.2 HTML文件及效果

index.html

##index.html
<!doctype html>
<html lang="zh-CN">
  <head>
    <!-- 必须的 meta 标签 -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap 的 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">

    <title>首页</title>
  </head>
  <body>
    <h1>这是首页的模拟界面</h1>

    <!-- JavaScript 文件是可选的。从以下两种建议中选择一个即可! -->

    <!-- 选项 1:jQuery 和 Bootstrap 集成包(集成了 Popper) -->
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-LCPyFKQyML7mqtS+4XytolfqyqSlcbB3bvDuH9vX2sdQMxRonb/M3b9EmhCNNNrV" crossorigin="anonymous"></script>

    <!-- 选项 2:Popper 和 Bootstrap 的 JS 插件各自独立 -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-gRC4eoaRyQ8xv2X6Mnf+eOIrtON3wId3dAkwO0HQX26OrFBoLpjX/XWOJacSiZhL" crossorigin="anonymous"></script>
    -->
  </body>
</html>

在这里插入图片描述
login.html

##login.html
<!doctype html>
<html lang="zh-CN">
<head>
    <!-- 必须的 meta 标签 -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap 的 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
          integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">

    <title>用户登录</title>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-sm">

        </div>
        <div class="col-sm">
            <h3 style="text-align: center">用户登录</h3>
            <div class="alert alert-warning" role="alert">
                <strong>登录失败!</strong> 用户密码错误!
            </div>

            <form>
                <div class="form-group">
                    <label>用户名</label>
                    <input type="text" class="form-control">
                </div>
                <div class="form-group">
                    <label>Password</label>
                    <input type="password" class="form-control">
                    <small class="form-text text-muted">密码必须是字母、数字或者特殊符号组成.</small>
                </div>
                <a href="/register/" class="text-success">
                    <ins>新用户注册</ins>
                </a>
                <button type="submit" class="btn btn-primary float-right">登录</button>
            </form>

        </div>
        <div class="col-sm">

        </div>
    </div>
</div>
<!-- JavaScript 文件是可选的。从以下两种建议中选择一个即可! -->

<!-- 选项 1:jQuery 和 Bootstrap 集成包(集成了 Popper) -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js"
        integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
        crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-LCPyFKQyML7mqtS+4XytolfqyqSlcbB3bvDuH9vX2sdQMxRonb/M3b9EmhCNNNrV"
        crossorigin="anonymous"></script>

<!-- 选项 2:Popper 和 Bootstrap 的 JS 插件各自独立 -->
<!--
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-gRC4eoaRyQ8xv2X6Mnf+eOIrtON3wId3dAkwO0HQX26OrFBoLpjX/XWOJacSiZhL" crossorigin="anonymous"></script>
-->
</body>
</html>

在这里插入图片描述
register.html

##register.html
<!doctype html>
<html lang="zh-CN">
<head>
    <!-- 必须的 meta 标签 -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap 的 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
          integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">

    <title>注册界面</title>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-sm">

        </div>
        <div class="col-sm">
            <h3 style="text-align: center">用户注册</h3>
            <form>
                <div class="form-group">
                    <label>用户名</label>
                    <input type="text" class="form-control">
                </div>
                <div class="form-group">
                    <label>电子邮箱</label>
                    <input type="email" class="form-control">
                </div>
                <div class="form-group">
                    <label>密码</label>
                    <input type="password" class="form-control">
                    <small class="form-text text-muted">密码必须是字母、数字或者特殊符号组成.</small>
                </div>
                <div class="form-group">
                    <label>确认密码</label>
                    <input type="password" class="form-control">
                    <small class="form-text text-muted">密码必须是字母、数字或者特殊符号组成.</small>
                </div>
                <a href="/login/" class="text-success">
                    <ins>用户登录</ins>
                </a>
                <button type="submit" class="btn btn-primary float-right">注册</button>
            </form>

        </div>
        <div class="col-sm">

        </div>
    </div>
</div>
<!-- JavaScript 文件是可选的。从以下两种建议中选择一个即可! -->

<!-- 选项 1:jQuery 和 Bootstrap 集成包(集成了 Popper) -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js"
        integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
        crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-LCPyFKQyML7mqtS+4XytolfqyqSlcbB3bvDuH9vX2sdQMxRonb/M3b9EmhCNNNrV"
        crossorigin="anonymous"></script>

<!-- 选项 2:Popper 和 Bootstrap 的 JS 插件各自独立 -->
<!--
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-gRC4eoaRyQ8xv2X6Mnf+eOIrtON3wId3dAkwO0HQX26OrFBoLpjX/XWOJacSiZhL" crossorigin="anonymous"></script>
-->
</body>
</html>

在这里插入图片描述

5.3 git提交

在这里插入图片描述

6. 完善登陆的视图函数(业务逻辑)

6.1 HTML的完善

在这里插入图片描述

  • 错误原因是CSRF验证失败,请求被中断。CSRF(Cross-site request forgery)跨站请求伪造,是一种常见的网络攻击手段,具体原理和技术内容请自行百科。Django自带对许多常见攻击手段的防御机制,CSRF就是其中一种,还有XSS、SQL注入等。
  • 解决这个问题的办法其实在Django的Debug错误页面已经给出了,我们需要在前端页面的form表单内添加一个{% csrf_token %}标签.

templates/login.html

  修改1. 有message信息则显示, 没有就不显示。
  修改2: 提交登录信息时, 以post方法提交给/login/对应的是视图函数处理。
  修改3: Django提供了csrf防攻击的机制, 添加该信息则可顺利访问登陆界面
  修改4:name="username"指定表单内容存储的key值名称, eg: {"username":"你填的用户
  名","password":"你填的密码" }
###templates/login.html
//此文件是在原来基础上进行修改的
    <title>用户登录</title>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-sm">
        </div>
        <div class="col-sm">
            <h3 style="text-align: center">用户登录</h3>
            # 修改1. 有message信息则显示, 没有就不显示。
            {% if message %}
            <div class="alert alert-warning" role="alert">
                <strong>登录失败!</strong> {
   
   { message }}
            </div>
            {% endif %}
		# 修改2: 提交登录信息时, 以post方法提交给/login/对应的是视图函数处理。
            <form action="/login/" method="post">
            # 修改3: Django提供了csrf防攻击的机制, 添加该信息则可顺利访问登陆界面
                {% csrf_token %}
                <div class="form-group">
                    <label>用户名</label>
                    # 修改4:name="username"指定表单内容存储的key值名称, eg:
{"username":"你填的用户名"}
                    <input type="text" class="form-control" name="username">
                </div>
                <div class="form-group">
                    <label>Password</label>
                    <input type="password" class="form-control" name="password">
                    <small class="form-text text-muted">密码必须是字母、数字或者特殊符号组成.</small>
                </div>
                <a href="/register/" class="text-success">
                    <ins>新用户注册</ins>
                </a>
                <button type="submit" class="btn btn-primary float-right">登录</button>
            </form>

        </div>
        <div class="col-sm">

        </div>
    </div>
</div>

在这里插入图片描述

6.2 视图函数的完善(login)

def login(request):
    if request.method == 'POST':
        username = request.POST.get('username').strip()
        password = request.POST.get('password').strip()
        print(username, password)
        print(request.POST)
        if username and password:
            user = SiteUser.objects.filter(name=username,password=password).first()
            if user:
                return redirect('/index/')
            else:
                message = "用户名或者密码错误"
            return render(request, 'login/login.html',{'message': message})
        else:
            message = "非法的数据信息"
            return render(request, 'login/login.html', {'message': message})
    return render(request, 'login/login.html')

6.3 测试是否成功

    print(username, password)
    print(request.POST)

在这里插入图片描述
访问网址:http:127.0.0.1:8000/login/ 正确的用户名和密码或者错误的用户名和密码
在这里插入图片描述
在这里插入图片描述

6.4 git 提交

在这里插入图片描述

7. session会话和登录的视图函数

7.1 登陆成功,存储登录的用户信息到session中

在这里插入图片描述

# login/views.py
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username').strip()
        password = request.POST.get('password').strip()
        #print(username, password)
        #print(request.POST)
        if username and password:
            user = SiteUser.objects.filter(name=username,password=password).first()
            if user:
                # ------------核心修改的内容开始
                request.session['is_login'] = True
                request.session['user_id'] = user.id
                request.session['username'] = user.name
                # --------------核心修改的内容结束
                return redirect('/index/')
            else:
                message = "用户名或者密码错误"
            return render(request, 'login/login.html',{'message': message})
        else:
            message = "非法的数据信息"
            return render(request, 'login/login.html', {'message': message})
    return render(request, 'login/login.html')

7.2 登出时,清空session信息

# login/views.py
def logout(request):
    # 如果状态不是登录状态,则无法登出。
    if request.session.get('is_login'):
        request.session.flush()  # 清空session信息
    # redirect: 重定向(跳转)
    return redirect('/login/')

7.3 在首页添加登出的超链接并测试

# templates/login/index.html
# 核心代码如下:
  <body>
    <h1>你好, {
   
   { request.session.username  }},这是首页的模拟界面</h1>
    <a href="/logout/"><strong style="font-size: 20px">登出</strong></a>

在这里插入图片描述
访问网址: http://127.0.0.1:8000/index/
在这里插入图片描述

# templates/login/index.html
# 核心代码如下:
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <a class="navbar-brand" href="#">主页</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>

    <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
                <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
            <li class="nav-item dropdown">
                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown"
                   aria-haspopup="true" aria-expanded="false">
                    Dropdown
                </a>
                <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                    <a class="dropdown-item" href="#">Action</a>
                    <a class="dropdown-item" href="#">Another action</a>
                    <div class="dropdown-divider"></div>
                    <a class="dropdown-item" href="#">Something else here</a>
                </div>
            </li>
            <li class="nav-item">
                <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
            </li>
        </ul>
        <form class="form-inline my-2 my-lg-0">
            <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
            <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
        </form>
        <ul class="navbar-nav">
            <li class="nav-item">
                <a class="nav-link" href="/logout/">登出</a>
            </li>

            <li class="nav-item">
                <a class="nav-link" href="/index/">{
   
   { request.session.username }}</a>
            </li>
        </ul>
    </div>
</nav>

<h1>你好, {
   
   { request.session.username }}, 这是首页的模拟界面</h1>

在这里插入图片描述
在这里插入图片描述

7.4 git提交

在这里插入图片描述

在这里插入图片描述

8. 上传到gitee

8.1 新建仓库

在这里插入图片描述

8.2 创建README.md文件

# loginRegister
##项目介绍
##软件架构
##安装教程(基于互联网)
\```bash
git clone xxxx
# 如何生成requirements.txt文件?pip freeze  > requirements.txt
pip -r install requirements.txt  # pip安装文件中所有的第三方模块
cd xxxx
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
\```
浏览器访问网址: http://127.0.0.1:8000/index

##使用说明
- 可以运行多个平台

在这里插入图片描述

8.3 生成requirements.txt文件(所需的包)

在这里插入图片描述
在这里插入图片描述

8.4 绑定gitee仓库

git remote add origin https://gitee.com/dan-2021/loginregister.git

在这里插入图片描述
在这里插入图片描述

8.5 git提交

在这里插入图片描述

8.6 上传仓库

git push --set-upstream origin master -f

在这里插入图片描述
在这里插入图片描述

9. 查看之前的修改内容

9.1 从gitee仓库查看

在这里插入图片描述
浏览文件可查看之前的操作
在这里插入图片描述

9.2 命令行方式

git branch back-morning   ##创建新的分支
git branch    ##查看当前分支
git log     ##查看commit码
git reset --hard  c932da0a7dab3    ##版本回退
delete   ##删除分支

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45777669/article/details/114937867