1987WEB视界-分享互联网热点话题和事件

您现在的位置是:首页 > 服务器 > 正文

服务器

Django开发基于terraform管理腾讯云资源的CMDB系统:用户模块

1987web2023-09-14服务器66
用户模型设计

用户模型设计

定义一个名为UserProfile的用户模型,包含以下字段:

  • username: 用户名
  • password: 密码
  • email: 邮箱
  • phone: 手机号
  • is_active: 是否激活
  • is_superuser: 是否超级管理员
  • is_staff: 是否职员
  • date_joined: 注册日期
  • last_login: 最后登录日期

fromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportAbstractBaseUser, BaseUserManagerclassUserManager(BaseUserManager):defcreate_user(self, username, password=None, **extra_fields):ifnotusername:raiseValueError(The username must be set)
        user = self.model(username=username, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)returnuserdefcreate_superuser(self, username, password=None, **extra_fields):extra_fields.setdefault(is_staff,True)
        extra_fields.setdefault(is_superuser,True)returnself.create_user(username, password, **extra_fields)classUserProfile(AbstractBaseUser):username = models.CharField(max_length=50, unique=True)
    email = models.EmailField(max_length=254, null=True, blank=True)
    phone = models.CharField(max_length=11, null=True, blank=True)
    is_active = models.BooleanField(default=True)
    is_superuser = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    date_joined = models.DateTimeField(auto_now_add=True)
    last_login = models.DateTimeField(auto_now=True)

    USERNAME_FIELD =usernameobjects = UserManager()def__str__(self):returnself.usernamedefhas_perm(self, perm, obj=None):returnTruedefhas_module_perms(self, app_label):returnTrue@propertydefis_admin(self):returnself.is_staffandself.is_superuser@propertydefis_staff(self):returnself.is_staffclassMeta:db_table =user_profileverbose_name =用户verbose_name_plural = verbose_name

注册和登录视图

定义注册和登录视图,包括注册和登录表单、表单验证、重定向等功能,实现用户的注册和登录功能。

fromdjango.shortcutsimportrender, redirectfromdjango.contrib.authimportauthenticate, login, logoutfromdjango.contribimportmessagesfrom.formsimportUserRegisterFormdefregister(request):ifrequest.method ==POST:
        form = UserRegisterForm(request.POST)ifform.is_valid():
            user = form.save()
            username = form.cleaned_data.get(username)
            messages.success(request,fAccount created for{username}!)returnredirect(login)else:
        form = UserRegisterForm()returnrender(request,users/register.html, {form: form})defuser_login(request):ifrequest.method ==POST:
        username = request.POST.get(username)
        password = request.POST.get(password)
        user = authenticate(request, username=username, password=password)ifuserisnotNone:
            login(request, user)returnredirect(index)else:
            messages.error(request,用户名或密码错误)returnrender(request,users/login.html)

base.html模板代码:

html><html><head><title>{% block title %}{% endblock %}title>head><body><nav><ul><li><ahref="/">Homea>li>{% if user.is_authenticated %}<li><ahref="/profile/">Profilea>li><li><ahref="/logout/">Logouta>li>{% else %}<li><ahref="/login/">Logina>li><li><ahref="/signup/">Signupa>li>{% endif %}ul>nav>{% block content %}
    {% endblock %}body>html>

以上代码定义了一个基本的HTML模板,包含了一个导航栏和一个content块。导航栏包含了几个链接,根据用户是否已认证来显示不同的链接。如果用户已认证,则显示Profile和Logout链接,否则显示Login和Signup链接。

在content块中,子模板可以定义自己的内容,例如登录表单、注册表单、个人资料页面等等。

注册页

{% extends "base.html" %}

{% block title %}Signup{% endblock %}

{% block content %}<h2>Signuph2><formmethod="post">{% csrf_token %}<labelfor="email">Emaillabel><inputtype="email"id="email"name="email"required><br><br><labelfor="password1">Passwordlabel><inputtype="password"id="password1"name="password1"required><br><br><labelfor="password2">Confirm Passwordlabel><inputtype="password"id="password2"name="password2"required><br><br><buttontype="submit">Signupbutton>form>{% endblock %}

以上代码使用了Django模板语言,继承了base.html模板,并在content块中定义了一个简单的注册表单。表单使用POST方法提交,并包含了一个csrf_token字段,用于防止跨站请求伪造攻击。

注册表单包含了三个必填字段:email、password1和password2。其中,password1和password2用于输入密码和确认密码,确保用户输入的密码正确无误。注册按钮使用了默认的样式,可以根据需要进行自定义样式。

登陆页

{% extends "base.html" %}

{% block content %}<h2>Loginh2><formmethod="post">{% csrf_token %}<labelfor="email">Emaillabel><inputtype="email"id="email"name="email"required><br><br><labelfor="password">Passwordlabel><inputtype="password"id="password"name="password"required><br><br><buttontype="submit">Loginbutton>form>{% endblock %}

以上代码使用了Django模板语言,继承了base.html模板,并在content块中定义了一个简单的登录表单。表单使用POST方法提交,并包含了一个csrf_token字段,用于防止跨站请求伪造攻击。

登录表单包含了两个必填字段:email和password,用户需要输入正确的邮箱和密码才能登录。登录按钮使用了默认的样式,可以根据需要进行自定义样式。

用户信息视图

定义用户信息视图,包括显示用户信息、修改用户信息等功能,实现用户信息的管理和维护。

fromdjango.shortcutsimportrender, redirectfromdjango.contrib.auth.decoratorsimportlogin_requiredfrom.formsimportUserUpdateForm@login_requireddefprofile(request):ifrequest.method ==POST:
        form = UserUpdateForm(request.POST, instance=request.user)ifform.is_valid():
            form.save()
            messages.success(request,fYour account has been updated!)returnredirect(profile)else:
        form = UserUpdateForm(instance=request.user)returnrender(request,users/profile.html, {form: form})

用户信息页

{% extends "base.html" %}

{% block title %}Profile{% endblock %}

{% block content %}<h2>Profileh2><p><strong>Email:strong>{{ user.email }}p><p><strong>Username:strong>{{ user.username }}p><p><strong>First Name:strong>{{ user.first_name }}p><p><strong>Last Name:strong>{{ user.last_name }}p>{% endblock %}

以上代码使用了Django模板语言,继承了base.html模板,并在content块中定义了一个简单的个人资料页面。页面显示了当前用户的基本信息,包括邮箱、用户名、名字和姓氏等。

在模板中,可以通过user变量访问当前登录的用户对象。可以根据需要修改和完善个人资料页面,例如添加用户头像、修改密码、编辑个人资料等。

用户权限控制

不同的用户拥有不同的权限,管理员可以对用户的权限进行控制和管理。因此需要定义用户权限控制模块,包括角色管理、权限管理等功能。

fromdjango.contrib.auth.modelsimportPermission, Group定义角色classRole(models.Model):name = models.CharField(max_length=50, unique=True)
    permissions = models.ManyToManyField(Permission)classMeta:db_table =role定义用户组classGroup(models.Model):name = models.CharField(max_length=50, unique=True)
    roles = models.ManyToManyField(Role)classMeta:db_table =groupverbose_name =用户组verbose_name_plural = verbose_name定义权限控制视图fromdjango.contrib.auth.decoratorsimportpermission_required@permission_required(auth.view_permission)defpermission_list(request):permissions = Permission.objects.all()returnrender(request,users/permission_list.html, {permissions: permissions})@permission_required(auth.add_permission)defpermission_create(request):ifrequest.method ==POST:
        form = PermissionForm(request.POST)ifform.is_valid():
            form.save()
            messages.success(request,fPermission created successfully!)returnredirect(permission_list)else:
        form = PermissionForm()returnrender(request,users/permission_create.html, {form: form})

集成Terraform腾讯云资源管理

通常需要管理和维护各种云资源,如Terraform腾讯云资源等。可以使用腾讯云SDK和Terraform API实现对Terraform腾讯云资源的管理和维护。

importjsonimportrequests调用Terraform API获取腾讯云资源列表defget_tencent_cloud_resources():url =https://api.terraform.io/v1/organizations/{organization}/workspaces/{workspace}/runsheaders = {Authorization:Bearer {token},Content-Type:application/vnd.api+json}
    payload = {filter: {status: [applied]
        }
    }
    r = requests.get(url, headers=headers, params=payload)
    data = json.loads(r.text)
    resources = []foritemindata[data]:ifitem[attributes].get(target-addresses):
            resources.append(item[attributes][target-addresses])returnresources在CMDB系统中显示腾讯云资源列表@login_requireddeftencent_cloud_resources(request):resources = get_tencent_cloud_resources()returnrender(request,users/tencent_cloud_resources.html, {resources: resources})

用户资源页

{% extends "base.html" %}

{% block title %}Tencent Cloud Resources{% endblock %}

{% block content %}<h2>Tencent Cloud Resourcesh2><ul>{% for resource in resources %}<li>{{ resource.name }} - {{ resource.type }}li>{% empty %}<li>No resources found.li>{% endfor %}ul>{% endblock %}

以上代码使用了Django模板语言,继承了base.html模板,并在content块中定义了一个简单的腾讯云资源列表页面。页面显示了当前用户的腾讯云资源列表,包括资源名称和类型等。

在模板中,可以通过resources变量访问当前用户拥有的腾讯云资源对象列表。可以根据需要修改和完善腾讯云资源列表页面,例如添加筛选、排序、分页等功能。