signed

QiShunwang

“诚信为本、客户至上”

Django用户注册、登录、编辑信息、删除(简易版)

2021/3/21 8:35:51   来源:

views.py

# Create your views here.
from django.shortcuts import render, HttpResponse, redirect
from app01 import models
#     视图函数必须接受一个形参

def ab_render(request):
    # user_dict = {'username': 'jason', 'age':18}

    # 第一种传值方式  更加精确,节省资源
    # return render(request, '01my.html', {'data':user_dict, 'date':123})
    # 第二种方式  当要传输的数特别多的时候
    return render(request, '01my.html')

def login(request):
    """
    :param request:   请求相关的数据对象,里面有很多简易的方法
    :return:
    """
    if request.method == "POST"
        """
            get 只会获取最后一个元素
        """
    # 获取用户名和密码,然后利用orm操作数据,检验数据是否正确

        username = request.POST.get('username')
        password = request.POST.get('password')
        # 取数据库中查询数据
        from app01 import models
        user_obj = models.User.objects.filter(username=username).first()
       
        if user_obj:
            # print(type(password))
            # print(type(user_obj.password))
            if password == user_obj.password:
                return HttpResponse("登录成功")
            else:
                return HttpResponse("密码错误")
        else:
            return HttpResponse('用户不存在')
    return render(request, 'login.html')


'''           
    静态文件动态解析
     {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap-3.3.7/dist/css/bootstrap-theme.min.css'%}">
    <script src="{% static 'bootstrap-3.3.7/dist/js/bootstrap.min.js'%}"></script>
'''

def reg(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 直接获取用户数据存入数据库
        # from app01 import models
        # 第一种方法
        # res = models.User.objects.create(username=username, password=password)
        # # 返回值就是当前被创建对象本身
        # print(res, res.username, res.password)
        # 第二种方法
        user_obj = models.User(username=username, password=password)
        user_obj.save()
    return render(request, 'reg.html')


def userlist(request):
    # 查询出用户表中所有的数据
    # 方式一
    # data = models.User.objects.filter()
    # print(data)
    # 方式2
    user_queryset = models.User.objects.all()
    return render(request, 'userlist.html', locals())



def edit_user(request):
    # 获取url问好后面的参数
    edit_id = request.GET.get('user_id')
    # 查询当前用户想要编辑的数据对象
    # 查询当前用户想要编辑的数据对象
    edit_obj = models.User.objects.filter(id=edit_id).first()
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 去数据库中修改对应的数据内容
        # 修改数据方式一
        # models.User.objects.filter(id=edit_id).update(username=username, password=password)
        '''
            将filter查询出来的列表中所有的对象全部更新   批量更新操作
            
            只修改被修改的字段
            
        '''
        # 修改数据方式2
        edit_obj.username = username
        edit_obj.password = password
        edit_obj.save()
        '''
            当字段的别多的时候效率会非常低
            从头将所有的数据的所有字段全部更新一边,无论该字段是否被被修改
            
        '''



        # 跳转到数据展示的页面
        return redirect('/userlist/')

    return render(request, 'edit_user.html', locals())


def delete_user(request):
    delete_id = request.GET.get('user_id')
    models.User.objects.filter(id=delete_id).delete()

    # 批量删除

    # 跳转到展示页面

    '''
        真正的删除数据需要二次确认
        删除数据内部其实并不是真正的删除数据,我们会给数据添加一个标识字段用来表示,当前数据是否,被删除了,如果数据被删除了,仅仅是给这个字段修改了一个状态
        username      password  is_delete
        jasdon        123        0
        liu           123        1
        
    '''

    return redirect('/userlist/')

url.py

```python
from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^ab_render/', views.ab_render),
    # 登录功能
    url(r'^login/', views.login),
    # 注册功能
    url(r'^register/', views.reg),
    # 展示
    url(r'^userlist/', views.userlist),
    # 编辑
    url(r'^edit_user', views.edit_user),
    # 删除用户
    url(r'^delete_user', views.delete_user)

]



models.py

from django.db import models

# Create your models here.
class User(models.Model):
    id = models.AutoField(primary_key=True, verbose_name='id')
    username = models.CharField(max_length=32,verbose_name='用户名')
    password = models.CharField(verbose_name='密码', max_length=64)
    def __str__(self):
        return '%s'%self.username