models:

  1. from django.db import models
  2.  
  3. # Create your models here.
  4.  
  5. class Book(models.Model):
  6. name = models.CharField(max_length = 30)
  7. price = models.DecimalField(max_digits=30,decimal_places=3)
  8. date = models.DateTimeField()
  9. publish = models.ForeignKey(to="Publish",to_field='id',on_delete = models.CASCADE)
  10. authors = models.ManyToManyField(to='Author')
  11.  
  12. class Publish(models.Model):
  13. title = models.CharField(max_length = 30)
  14. addr = models.CharField(max_length = 30)
  15.  
  16. class Author(models.Model):
  17. name = models.CharField(max_length = 30)
  18. addr = models.CharField(max_length = 30)
  19. gf = models.OneToOneField(to='Gfriend',to_field='id',on_delete=models.CASCADE)
  20.  
  21. class Gfriend(models.Model):
  22. name = models.CharField(max_length =30)
  23. age = models.IntegerField()
  24.  
  25. class User(models.Model):
  26. name = models.CharField(max_length = 30)
  27. pwd = models.IntegerField()
  28. date = models.DateTimeField()
  29. email = models.EmailField()

models

settings配置:

  1. 配置数据库
  2.  
  3. DATABASES = {
  4. 'default': {
  5. 'ENGINE': 'django.db.backends.mysql',
  6. 'NAME':'test1', # 要连接的数据库,连接前需要创建好
  7. 'USER':'root', # 连接数据库的用户名
  8. 'PASSWORD':'zhaoyun', # 连接数据库的密码
  9. 'HOST':'127.0.0.1', # 连接主机,默认本级
  10. 'PORT':3306 # 端口 默认3306
  11. }
  12. }
  13.  
  14. 配置静态文件
  15.  
  16. STATICFILES_DIRS=[
  17. os.path.join(BASE_DIR,'static'),
  18. ]

init:

  1. import pymysql
  2. pymysql.install_as_MySQLdb()

urls:

  1. from django.contrib import admin
  2. from django.urls import path,re_path
  3. from first import views
  4. urlpatterns = [
  5. path('admin/', admin.site.urls),
  6. path('index/',views.index, name='index'),
  7. path('add_book/',views.add_book,name='add_book'),
  8.  
  9. re_path('del_book/',views.del_book ,name='del_book'),
  10.  
  11. re_path('edit_book/(\d+)/',views.edit_book,name = 'edit_book'),
  12.  
  13. path('login/',views.login_session,name='login'),
  14.  
  15. path('logout/',views.logout,name = 'logout'),
  16. path('register/',views.register, name = 'register'),
  17. path('hint/',views.hint,name = 'hint') #这个是你的 跳转注册的界面
  18.  
  19. ]

urls

views:

  1. from django.shortcuts import render,redirect,reverse,HttpResponse
  2. import json,datetime
  3.  
  4. from first.models import Book,Author,Publish,User
  5.  
  6. from first .form import U_ser
  7. # Create your views here.
  8.  
  9. #定义一个装饰器 然后所有的 函数都用装饰器进行封装
  10. def wrapper(func):
  11. def inner(*args,**kwargs):
  12. request = args[0]
  13. # if request.COOKIES.get('is_login'):
  14. if request.session.get('is_login'):
  15.  
  16. return func(*args,**kwargs)
  17. else:
  18. return redirect(reverse('login'))
  19.  
  20. return inner
  21.  
  22. #登陆函数 cookie
  23. # def login(request):
  24. # print('11111111111111111')
  25. # if request.method == 'POST':
  26. # name = request.POST.get('user')
  27. # pwd = request.POST.get('pwd')
  28. # print(name,pwd)
  29. # log_obj = User.objects.filter(name = name ,pwd=pwd).first()
  30. # if log_obj: #登陆成功
  31. # ret = redirect(reverse('index'))
  32. # ret.set_cookie('name',name)
  33. # ret.set_cookie('pwd',pwd)
  34. # ret.set_cookie('is_login',True)
  35. # ret.set_cookie('last_time',log_obj.date)
  36. # log_obj.date = datetime.datetime.now()
  37. # log_obj.save()
  38. #
  39. # return ret
  40. # # return redirect(reverse('login'))
  41. # return render(request,'login.html')
  42.  
  43. @wrapper
  44. #主界面
  45. def index(request):
  46. book_list = Book.objects.all()
  47. publish_list = Publish.objects.all()
  48. author_list = Author.objects.all()
  49.  
  50. return render(request,'index.html',locals())
  51.  
  52. @wrapper
  53. def add_book(request):
  54. '''
  55. 这是对书籍的信息进行增加的函数
  56. :param request:
  57. :return:
  58. '''
  59. book_list = Book.objects.all()
  60. publish_list = Publish.objects.all()
  61. author_list = Author.objects.all()
  62.  
  63. if request.method == 'POST':
  64. name = request.POST.get('name')
  65. price = request.POST.get('price')
  66. date = request.POST.get('date')
  67. publish = request.POST.get('publish')
  68. author = request.POST.getlist('author')
  69. print(author)
  70. book = Book.objects.create(name = name,price = price, date = date ,publish_id=publish)
  71. book .authors.set(author) #给你的这个书籍对象 添加作者
  72.  
  73. return redirect(reverse('index')) #添加完之后就重新定向到主界面
  74.  
  75. return render(request,'add_book.html',locals())
  76.  
  77. @wrapper
  78. def del_book(request): #删除函数
  79. deid = request.POST.get('deid')
  80. print(deid)
  81. del_book = Book.objects.filter(id = deid) #获取你前端点击的那个id的书籍对象
  82. del_book.delete()
  83. print(111*100)
  84. return HttpResponse(json.dumps({'status':1}))
  85.  
  86. @wrapper
  87. def edit_book(request ,edid):
  88. # print('___________________________')
  89. book_list = Book.objects.filter(id=edid).first()
  90. publish_list = Publish.objects.all()
  91. author_list = Author.objects.all()
  92. print(book_list)
  93. print(6666666666666)
  94. if request.method =='POST':
  95. print(2222222222)
  96.  
  97. name = request.POST.get('name')
  98. price = request.POST.get('price')
  99. date = request.POST.get('date')
  100. publish = request.POST.get('publish')
  101. author = request.POST.getlist('author')
  102. # bk_bj =Book.objects.filter(id=edid).update(name=name, price=price, date=date, publish=publish)
  103. # bk_bj.author.set(author)
  104. print(3333333333333)
  105. book_list.name = name
  106. book_list.price = price
  107. book_list.publish_id = publish
  108. book_list.authors.set(author)
  109. book_list.save()
  110. return redirect(reverse('index'))
  111. print(55555555555555)
  112. return render(request,'edit_book.html',locals())
  113.  
  114. @wrapper
  115. def logout(request): #注销
  116. ret = redirect(reverse('login'))
  117. # ret.delete_cookie('name')
  118. # ret.set_cookie('last_time')
  119. # ret.delete_cookie('pwd')
  120. request.session.flush()
  121. return ret
  122.  
  123. #这个使用session
  124. def login_session(request):
  125. print(request.POST)
  126. if request.method == 'POST':
  127. name = request.POST.get('user','')
  128.  
  129. pwd = request.POST.get('pwd','')
  130.  
  131. user_obj = User.objects.filter(name=name ,pwd =pwd).first()
  132.  
  133. if user_obj:
  134. ret = redirect(reverse('index'))
  135. request.session['is_login'] = True
  136. request.session['name'] = name
  137. request.session['pwd'] = pwd
  138. request.session['last_time'] = str(user_obj.date) # 你去出的是一个date兑现 但是要存起来就要用 str
  139. user_obj.date = datetime.datetime.now()
  140. user_obj.save()
  141. return ret
  142. # else: #这一步是你输入的账号和密码不对的时候
  143. # return HttpResponse('您输入用户名不对')
  144. return redirect(reverse('hint'))
  145. return render(request,'login.html')
  146.  
  147. #定义一个注册用户的函数
  148. def register(request):
  149.  
  150. if request.method == 'POST':
  151.  
  152. form = U_ser(request.POST) #把前端的信息和form组件对比判断
  153. if form.is_valid():#正确
  154. name = request.POST.get('name')
  155. pwd = request.POST.get('pwd')
  156. date = request.POST.get('date')
  157. email = request.POST.get('email')
  158. User.objects.create(name = name ,pwd = pwd,date = date,email = email)
  159.  
  160. return redirect(reverse('login')) #注册成功就去登陆界面
  161. else:
  162.  
  163. g_error = form.errors.get('__all__') #获取所有的错误
  164. if g_error:
  165. g_error = g_error[0]
  166. print(locals())
  167. return render(request,'register.html',locals())
  168.  
  169. form = U_ser()
  170. print(55555555555555)
  171. return render(request,'register.html',locals())
  172.  
  173. def hint(request):
  174. return render(request,'hint.html')

views

templates:

登陆界面:login

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
  7. <style>
  8. body {
  9. padding-top: 40px;
  10. padding-bottom: 40px;
  11. background-color: #eee;
  12. }
  13.  
  14. .form-signin {
  15. max-width: 330px;
  16. padding: 15px;
  17. margin: 0 auto;
  18. }
  19. .form-signin .form-signin-heading,
  20. .form-signin .checkbox {
  21. margin-bottom: 10px;
  22. }
  23. .form-signin .checkbox {
  24. font-weight: normal;
  25. }
  26. .form-signin .form-control {
  27. position: relative;
  28. height: auto;
  29. -webkit-box-sizing: border-box;
  30. -moz-box-sizing: border-box;
  31. box-sizing: border-box;
  32. padding: 10px;
  33. font-size: 16px;
  34. }
  35. .form-signin .form-control:focus {
  36. z-index: 2;
  37. }
  38. .form-signin input[type="email"] {
  39. margin-bottom: -1px;
  40. border-bottom-right-radius: 0;
  41. border-bottom-left-radius: 0;
  42. }
  43. .form-signin input[type="password"] {
  44. margin-bottom: 10px;
  45. border-top-left-radius: 0;
  46. border-top-right-radius: 0;
  47. }
  48.  
  49. </style>
  50. </head>
  51. <body>
  52.  
  53. <div class="container">
  54.  
  55. <form class="form-signin" action = '{% url 'login' %}' method = 'post' novalidate>
  56. {% csrf_token %}
  57. <h2 class="form-signin-heading">Please </h2>
  58. <label for="inputEmail" class="sr-only">Email address</label>
  59. <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required="" autofocus="" name="user">
  60. <label for="inputPassword" class="sr-only">Password</label>
  61. <input type="password" id="inputPassword" class="form-control" placeholder="Password" required="" name="pwd">
  62. <div class="checkbox">
  63. <label>
  64. <input type="checkbox" value="remember-me"> Remember me
  65. </label>
  66. </div>
  67. <button class="btn btn-lg btn-primary btn-block" type="submit" >Sign in</button>
  68. {# <button class="btn btn-lg btn-info btn-block" type="submit">Register</button>#}
  69. <a href="{% url 'register' %}" class="btn btn-lg btn-info btn-block" >Register</a>
  70. </form>
  71.  
  72. </div>
  73.  
  74. </body>
  75. </html>

login

注册:register

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
  7. <style>
  8. .container {
  9. margin-top: 80px;
  10.  
  11. }
  12.  
  13. {#body {#}
  14. {# background-color: darkslategray;#}
  15. .nide{
  16. margin-top: 10px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21.  
  22. {#<div class="container col-md-3 col-md-offset-4">#}
  23. {# <div>#}
  24. {# <div>#}
  25. {# <div class="bs-example" data-example-id="form-validation-states">#}
  26. {# <form>#}
  27. {# <div class="form-group has-success">#}
  28. {# <label class="control-label" for="inputSuccess1">请输入用户名</label>#}
  29. {# <input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2">#}
  30. {##}
  31. {# </div>#}
  32. {# <div class="form-group has-warning">#}
  33. {# <label class="control-label" for="inputWarning1">请输入密码</label>#}
  34. {# <input type="text" class="form-control" id="inputWarning1">#}
  35. {# </div>#}
  36. {# <div class="form-group has-error">#}
  37. {# <label class="control-label" for="inputError1">请确认密码</label>#}
  38. {# <input type="text" class="form-control" id="inputError1">#}
  39. {# </div>#}
  40. {# <div class="has-warning form-group">#}
  41. {# <input type="submit" value="提交" class="btn btn-info pull-right">#}
  42. {##}
  43. {# </div>#}
  44. {##}
  45. {##}
  46. {##}
  47. {# </form>#}
  48. {# </div>#}
  49. {# </div>#}
  50. {# </div>#}
  51. {#</div>#}
  52.  
  53. <div class="container col-md-5 col-md-offset-3">
  54. <div >
  55. <div>
  56. <form action="" method='post' novalidate>
  57. {% csrf_token %}
  58.  
  59. {% for foo in form %}
  60. {# 循环你的 报错的信息#}
  61. <div class="form-group">
  62. <label for="">{{ foo.label }}</label>
  63. {{ foo }}
  64. <span class="pull-right">{{ foo.errors.0 }}</span>
  65. {% if foo.label == 'R pwd' %}
  66. <span class="pull-right">{{ g_error|default_if_none:'' }}</span>
  67. {% endif %}
  68.  
  69. </div>
  70.  
  71. {% endfor %}
  72.  
  73. <div class="nide">
  74. <input type="submit" value = '提交' class="pull-right btn btn-info">
  75. </div>
  76.  
  77. </form>
  78. </div>
  79. </div>
  80. </div>
  81.  
  82. </body>
  83. </html>

注册

主界面:index

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
  7. </head>
  8. <body>
  9.  
  10. <div class="bs-example" data-example-id="inverted-navbar">
  11. <nav class="navbar navbar-inverse">
  12. <div class="container-fluid">
  13. <!-- Brand and toggle get grouped for better mobile display -->
  14. <div class="navbar-header">
  15. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-9" aria-expanded="false">
  16. <span class="sr-only">Toggle navigation</span>
  17. <span class="icon-bar"></span>
  18. <span class="icon-bar"></span>
  19. <span class="icon-bar"></span>
  20. </button>
  21. <a class="navbar-brand" href="#">图书管理</a>
  22. </div>
  23.  
  24. <!-- Collect the nav links, forms, and other content for toggling -->
  25. <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-9">
  26. <ul class="nav navbar-nav pull-right" >
  27. {# <li class="active"><a href="#">{{ request.COOKIES.name }}</a></li>#}
  28. {# <li><a href="#">{{ request.COOKIES.last_time }}</a></li>#}
  29. <li class="active"><a href="#">{{ request.session.name }}</a></li>
  30. <li><a href="#">{{ request.session.last_time }}</a></li>
  31. <li><a href="{% url 'logout' %}">注销</a></li>
  32. </ul>
  33. </div><!-- /.navbar-collapse -->
  34. </div><!-- /.container-fluid -->
  35. </nav>
  36. </div>
  37.  
  38. <div class="bs-example" data-example-id="contextual-table">
  39.  
  40. <a href="{% url 'add_book' %}" class="btn btn-info pull-right">添加书籍</a>
  41. <table class="table">
  42. <thead>
  43.  
  44. <tr>
  45. <th >序号</th>
  46. <th class="info">名字</th>
  47. <th>价格</th>
  48. <th class="warning">出版时间</th>
  49. <th>出版社</th>
  50. <th class="success">作者</th>
  51. <th>操作</th>
  52. <th>操作</th>
  53. </tr>
  54. </thead>
  55.  
  56. <tbody>
  57. {% for book in book_list %}
  58.  
  59. <tr class="active">
  60. <th scope="row">{{ forloop.counter }}</th>
  61. <td class="info">{{ book.name }}</td>
  62. <td class="danger">{{book.price}}</td>
  63. <td class="success">{{ book.date|date:'Y-m-d' }}</td>
  64. <td class="active"> {{ book.publish.title }}</td>
  65. <td class="warning">
  66. {% for author in book.authors.all %}
  67. {% if not forloop.last %}
  68. {{ author.name }}{{ '|' }}
  69. {% else %}
  70. {{ author.name }}
  71. {% endif %}
  72. {% endfor %}
  73.  
  74. </td>
  75. <td><a href="{% url 'edit_book' book.id %}" class="danger btn btn-info">编辑</a></td>
  76.  
  77. <td><a edid = '{{ book.id }}' class=' btn btn-danger'>删除</a></td>
  78. {# 让这个删除按钮获取要删除的书籍id#}
  79.  
  80. </tr>
  81.  
  82. </tbody>
  83.  
  84. {% endfor %}
  85. </table>
  86. </div>
  87. {% csrf_token %}
  88. <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
  89. <script>
  90. $('.btn-danger').click(function(){
  91. _this = $(this);
  92. console.log(111,_this)
  93. $.ajax({
  94. url:{% url 'del_book' %},
  95. type:'post',
  96. data:{
  97. deid:_this.attr('edid'),
  98. {#当你点击的时候获取你点击的那个对象的id传送到后台#}
  99. csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val()
  100. },
  101. success: function (data){
  102. var data = JSON.parse(data);
  103. if(data.status){
  104. _this.parent().parent().remove()
  105. }
  106. }
  107. })
  108. })
  109. </script>
  110.  
  111. </body>
  112. </html>

index

编辑:edit_book:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
  7.  
  8. <style>
  9. .container{
  10. margin-top: 80px;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15.  
  16. <div class="container">
  17. <div>
  18. <div>
  19. <div class="bs-example" data-example-id="form-validation-states">
  20. <form action="{% url 'edit_book' book_list.id %}}" method="post">
  21. {% csrf_token %}
  22. <div class="form-group has-success">
  23. <label class="control-label" for="inputSuccess1">书籍名称</label>
  24. <input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2" name="name" value="{{ book_list.name }}">
  25.  
  26. </div>
  27. <div class="form-group has-warning">
  28. <label class="control-label" for="inputWarning1">价格</label>
  29. <input type="text" class="form-control" id="inputWarning1" name="price" value = {{ book_list.price }}>
  30. </div>
  31. <div class="form-group has-error">
  32. <label class="control-label" for="inputError1">出版时间</label>
  33. <input type="date" class="form-control" id="inputError1" name="date" value="{{ book_list.date|date:'Y-n-d:x' }}">
  34. </div>
  35.  
  36. {# <div class="form-group has-success">#}
  37. {# <label class="control-label" for="inputSuccess1">书籍名称</label>#}
  38. {# <input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2" name="">#}
  39. {##}
  40. {# </div>#}
  41.  
  42. <div class="form-group has-error">
  43. <label class="control-label" for="inputError1" >出版社</label>
  44. {# <input type="text" class="form-control" id="inputError1" name="publish">#}
  45. <select name="publish" id="inputError1" class="form-control" >
  46. {% for pub in publish_list %}
  47. {% if book_list.publish == pub %}
  48. <option value="{{ pub.id }}" selected>{{ pub.title }}</option>
  49. {% else %}
  50. <option value="{{ pub.id }}" >{{ pub.title }}</option>
  51.  
  52. {% endif %}
  53.  
  54. {% endfor %}
  55.  
  56. </select>
  57. </div>
  58.  
  59. <div class="form-group has-warning">
  60. <label class="control-label" for="inputWarning1">作者</label>
  61. {# <input type="text" class="form-control" id="inputWarning1" name="author">#}
  62. <select name="author" id="" multiple class="form-control">
  63. {% for author in author_list %}
  64. {% if author in book_list.authors.all %}
  65. <option value="{{ author.id }}" selected >{{ author.name }}</option>
  66. {% else %}
  67. <option value="{{ author.id }}" >{{ author.name }}</option>
  68.  
  69. {% endif %}
  70.  
  71. {% endfor %}
  72.  
  73. </select>
  74. </div>
  75.  
  76. <input type="submit" value="提交" class="btn btn-info pull-right">
  77. </form>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82.  
  83. </body>
  84. </html>

编辑

添加:add_book

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
  7.  
  8. <style>
  9. .container{
  10. margin-top: 80px;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15.  
  16. <div class="container">
  17. <div>
  18. <div>
  19. <div class="bs-example" data-example-id="form-validation-states">
  20. <form action="{% url 'add_book' %}" method="post">
  21. {% csrf_token %}
  22. <div class="form-group has-success">
  23. <label class="control-label" for="inputSuccess1">书籍名称</label>
  24. <input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2" name="name" value = {{ book_list.name }} >
  25.  
  26. </div>
  27. <div class="form-group has-warning">
  28. <label class="control-label" for="inputWarning1">价格</label>
  29. <input type="text" class="form-control" id="inputWarning1" name="price">
  30. </div>
  31. <div class="form-group has-error">
  32. <label class="control-label" for="inputError1">出版时间</label>
  33. <input type="date" class="form-control" id="inputError1" name="date">
  34. </div>
  35.  
  36. {# <div class="form-group has-success">#}
  37. {# <label class="control-label" for="inputSuccess1">书籍名称</label>#}
  38. {# <input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2" name="">#}
  39. {##}
  40. {# </div>#}
  41.  
  42. <div class="form-group has-error">
  43. <label class="control-label" for="inputError1">出版社</label>
  44. {# <input type="text" class="form-control" id="inputError1" name="publish">#}
  45. <select name="publish" id="inputError1" class="form-control" selected>
  46. {% for publish in publish_list %}
  47. <option value="{{ publish.id }}">{{ publish.title }}</option>
  48. {% endfor %}
  49.  
  50. </select>
  51. </div>
  52.  
  53. <div class="form-group has-warning">
  54. <label class="control-label" for="inputWarning1">作者</label>
  55. {# <input type="text" class="form-control" id="inputWarning1" name="author">#}
  56. <select name="author" id="" multiple class="form-control" multiple>
  57. {% for author in author_list.all %}
  58. <option value="{{ author.id }}" >{{ author.name }}</option>
  59. {% endfor %}
  60.  
  61. </select>
  62. </div>
  63.  
  64. <input type="submit" value="提交" class="btn btn-info pull-right">
  65. </form>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70.  
  71. </body>
  72. </html>

add_book

跳转 hint

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. .container{
  8. margin-top: 80px;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13.  
  14. <script type="text/javascript">
  15. alert('您输入的用户名不存在 请去注册');
  16. setTimeout()
  17.  
  18. </script>
  19.  
  20. <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet">
  21.  
  22. <div class="container">
  23. <div>
  24. <div>
  25. <a href="{% url 'register' %}" class="btn btn-lg btn-info btn-block" >Register</a>
  26. </div>
  27. </div>
  28. </div>
  29.  
  30. </body>
  31. </html>

hint

图书管理系统 基于form组件的更多相关文章

  1. 基于Form组件实现的增删改和基于ModelForm实现的增删改

    一.ModelForm的介绍 ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 lab ...

  2. 图书管理系统(无中间件,用装饰器的)-----未基于FORM组件

    目的:实现图书的增删改查 models.py from django.db import models # Create your models here. class Book(models.Mod ...

  3. 2.1博客系统 |基于form组件和Ajax实现注册登录

    基于forms组件和Ajax实现注册功能 1 基于forms组件设计注册页面 --点击头像 === 点击input --头像预览: 修改用户选中的文件对象:获取文件对象的路径:修改img的src属性, ...

  4. Django基于form组件实现注册校验

    一 基本流程 1 创建form组件对应的类,比如LoginForm 2 前端的三种渲染方式: 渲染方式三种: 1 <form action="" novalidate met ...

  5. x学生管理系统(用中间件)-------基于FORM组件

    目的:实现学生,老师,课程的增删改查 models.py from django.db import models # Create your models here. class UserInfo( ...

  6. 基于FORM组件学生管理系统【中间件】

    目的:实现学生,老师,课程的增删改查 models.py from django.db import models # Create your models here. class UserInfo( ...

  7. day 77 基于form组件的注册功能

    Form 表单 py文件 from django import forms #定义一个form类注册用 class RegForm (forms.Form): username =forms.Char ...

  8. 书籍管理系统 -----没有form组件

    urls: from django.contrib import admin from django.urls import path,re_path from first import views ...

  9. django----基于Form组件实现的增删改和基于ModelForm实现的增删改

    一.ModelForm的介绍 ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 lab ...

随机推荐

  1. hibernate_annotation字段映射位置

    @Id private int id; private String name; private String wifeName; private Date birthDate; //Title是En ...

  2. Jquery 在多个相同标签click的问题

    最近在做文章的删除动作,用Jquery来执行操作.但是实现时一开始总是只能对第一个起作用,其他的点击删除后没反应. 一开始的jquery代码是这样的, $('#articledelete').on(' ...

  3. C++中文件流操作

    一.C++中流和流操作符 C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流.C++输入输出除了 ...

  4. 数据库SQLITE3初识

    数据库DataBase,我们都没有接触过数据库,那么数据库是什么? 它是一个有结构的.集成的.可共享的统一管理的数据集合! 所谓有结构的,指的是数据是按一定的模型组织起来的. 简单的说,拿个箱子,用隔 ...

  5. iOS仿今日头条滑动导航

    之前写了篇博客网易首页导航封装类.网易首页导航封装类优化,今天在前两个的基础上仿下今日头条. 1.网易首页导航封装类中主要解决了上面导航的ScrollView和下面的页面的ScrollView联动的问 ...

  6. 应输入 #endregion 指令报错的排查技巧

    VS2010中错误排查的一个小技巧,欢迎大家吐槽: 错误    9    应输入 #endregion 指令sses.cs    3778    2  xxx.xx   这个错很明显,是缺少#endr ...

  7. iOS开源项目周报0216

    由OpenDigg 出品的iOS开源项目周报第八期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等.Animated ...

  8. guava文档API制作成chm文件

    将HTML制作成CHM.EXE需要用到一个小工具“HUGECHM”,将HTML打包成CHM文件 1.下载guava的最新的版本,网址:https://github.com/google/guava/w ...

  9. [javaSE] IO流(对象序列化)

    写入 获取ObjectOutputStream对象,new出来,构造参数:FileOutputStream对象目标文件 调用ObjectOutputStream对象的writeObject()方法,参 ...

  10. megajson 高性能的json序列化、反序列化工具

    go 自带的 encoding/json 支持json的序列化和反序列化, 然而它是基于反射的,有下面几个缺点: 反射是性能差的代名词, 并且无法在编译时进行优化. 只有 Public 字段才可以,反 ...