Django小练习——图书管理系统+用户功能

urls.py

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('home/', views.home),
    path('login/', views.login),
    path('register/', views.register),
    path('logined_home/', views.logined_home),
    path('book_home/', views.book_home),
    path('author_home/', views.author_home),
    path('publish_home/', views.publish_home),
]

views.py

from django.shortcuts import render,HttpResponse
from book_sys import models

# Create your views here.

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


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


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


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


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


def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = models.User.objects.filter(username=username).first()
        if user_obj:
            if password == user_obj.password:
                return HttpResponse("登陆成功")
            else:
                return HttpResponse("密码错误")
        else:
            return HttpResponse("用户不存在")
    return render(request, 'login.html')


def register(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        re_password = request.POST.get('re_password')
        if password == re_password:
            user_obj = models.User(username=username, password=password)
            user_obj.save()
            return HttpResponse('注册成功')
        else:
            return HttpResponse('两次密码不一致')
    # 先给用户返回一个注册页面
    return render(request, 'register.html')

modles.py

from django.db import models

# Create your models here.

class User(models.Model):
    id = models.AutoField(primary_key=True, verbose_name='主键')
    reg_time = models.DateField()
    username = models.CharField(max_length=32, verbose_name='用户名')
    password = models.CharField(max_length=64, verbose_name='密码')


class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8,decimal_places=2)
    publish_date = models.DateField(auto_now_add=True)

#     # 一对多
    publish = models.ForeignKey(to='Publish', on_delete = models.CASCADE)
#     # 多对多
    authors = models.ManyToManyField(to='Author')
#
#
class Publish(models.Model):
    name = models.CharField(max_length=32)
    addr = models.CharField(max_length=64)
    email = models.EmailField()
#
    def __str__(self):
        return '对象:%s'%self.name
#
#
class Author(models.Model):
    name = models.CharField(max_length=32)
    # 一对一
    author_detail = models.OneToOneField(to='AuthorDetail',on_delete = models.CASCADE)

#
class AuthorDetail(models.Model):
    phone = models.BigIntegerField()
    addr = models.CharField(max_length=64)

home.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>

</head>
<body>
<nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/home/">图书管理系统</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
         {% block login_user %}
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">请先登录 <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
          {% endblock %}
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-3">
               <div class="list-group">
                  <a href="/home/" class="list-group-item active">
                   首页
                  </a>
{#                  <a href="/login/" class="list-group-item">登陆</a>#}
{#                  <a href="/register/" class="list-group-item">注册</a>#}
                  <a href="/book_home/" class="list-group-item">图书列表</a>
                  <a href="/author_home/" class="list-group-item">作者列表</a>
                  <a href="/publish_home/" class="list-group-item">出版社列表</a>
                </div>
        </div>
        <div class="col-md-9">
            <div class="panel panel-primary">
              <div class="panel-heading">
                <h3 class="panel-title">Panel title</h3>
              </div>
              <div class="panel-body">
                  {% block content %}
                       <div class="jumbotron">
                          <h1>Hello, world!</h1>
                          <p>...</p>
                          <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p>
                        </div>
                  {% endblock %}
              </div>
            </div>
        </div>
    </div>
</div>
</body>

book_home.html

{% extends 'home.html' %}
{% block content %}
    <h1>图书列表内容</h1>
{% endblock %}

author_home.html

{% extends 'home.html' %}
{% block content %}
    <h1>作者列表内容</h1>
{% endblock %}

publish_home.html

{% extends 'home.html' %}
{% block content %}
    <h1>出版社列表内容</h1>
{% endblock %}
原文地址:https://www.cnblogs.com/heirenxilou/p/13024726.html